问题描述
我试图在C语言中实现子字符串功能,这很合逻辑且容易,但是出于某种原因它会打印出符号。与其他人的功能相比,我已经在互联网上进行了多次检查,但是我找不到我的代码无法正常工作的确切原因。
#define MAX 50
char* substring(char string[],int indexBeginning,int indexEnd) {
const char *result[MAX];
int n= 0;
for (int i = indexBeginning; i <= indexEnd; i++) {
result[n++] = string[i];
}
result[n] = '\0';
return result;
}
解决方法
此数组声明
const char *result[MAX];
不正确。看来你是说
char result[MAX];
但是无论如何您都不能将数组用作返回的表达式
return result;
因为数组是该函数的局部对象,退出该函数后将不活动。
也是这个循环
for (int i = indexBeginning; i <= indexEnd; i++) {
result[n++] = string[i];
}
不安全,因为没有检查指定的索引对源字符串有效。
函数本身应声明为
char * substring( const char string[],size_t pos,size_t n );
可以通过以下演示程序中所示的以下方式定义该功能。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * substring( const char s[],size_t n )
{
char *result = NULL;
size_t length = strlen( s );
if ( pos < length )
{
n = n <= length - pos ? n : length - pos;
result = malloc( n + 1 );
if ( result != NULL )
{
result[n] = '\0';
memcpy( result,s + pos,n );
}
}
return result;
}
int main(void)
{
const char *s = "Hello World!";
char *word = substring( s,5 );
if ( word ) puts( word );
free( word );
word = substring( s,6,5 );
if ( word ) puts( word );
free( word );
return 0;
}
程序输出为
Hello
World