捎带着问另外一个关于字符串数组的问题。如下的一个函数:
char *reduce1(char *src)
{
char temp[1024];
char *save = temp;
strcpy(temp, src);
for(; *save; save++) ; //到字符串的末尾
save --; //退回到倒数第一个非空字符
if(*save) *save = '\0';
save = temp;
return save;
}
按理说这个函数经由指针返回的是本地的字符串数组,是一种未定义行为。然而为什么测试了无数遍,虽然有的编译器会警告,但一直都能够得到正确的结果,从来也不会出错?
这个函数,一旦用字符串数组的方式处理(用 temp[i] 替代 *save ),最后仍旧经由 指针 save 返回,则可能会出现错误的结果(乱码或者空串),或者偶尔出错,取决于用的什么编译器:
char *_reduce1(char *src)
{
char temp[1024];
char *save = temp;
int len;
strcpy(temp, src);
len = strlen(temp);
if(len >= 1) temp[len-1] = '\0';
return save;
}
char *reduce1(char *src)
{
char temp[1024];
char *save = temp;
strcpy(temp, src);
for(; *save; save++) ; //到字符串的末尾
save --; //退回到倒数第一个非空字符
if(*save) *save = '\0';
save = temp;
return save;
}
按理说这个函数经由指针返回的是本地的字符串数组,是一种未定义行为。然而为什么测试了无数遍,虽然有的编译器会警告,但一直都能够得到正确的结果,从来也不会出错?
这个函数,一旦用字符串数组的方式处理(用 temp[i] 替代 *save ),最后仍旧经由 指针 save 返回,则可能会出现错误的结果(乱码或者空串),或者偶尔出错,取决于用的什么编译器:
char *_reduce1(char *src)
{
char temp[1024];
char *save = temp;
int len;
strcpy(temp, src);
len = strlen(temp);
if(len >= 1) temp[len-1] = '\0';
return save;
}