使用函数返回字符串,自动变量被销毁,导致乱码,
程序员文章站
2022-03-25 16:17:20
在删除一个字符串中的指定字母,如:字符串 "aca",删除其中的 a 字母。这一C语言程序编写时,出现乱码。后发现 是使用了指针访问被销毁的局部变量。 将函数中的代码改为static。 还是C语言基础不够牢固! ......
在删除一个字符串中的指定字母,如:字符串 "aca",删除其中的 a 字母。这一c语言程序编写时,出现乱码。后发现
是使用了指针访问被销毁的局部变量。
#include <stdio.h> #include <string.h> #include <stdlib.h> char* deletechar(char *ca, char c) { static char retc[50];///加入static将其放在全局变量区 //printf("%s\n",retc); char *rc; int j = 0; while(*ca != '\0') { if(*ca != c) { retc[j++] = *ca; } ca+=1; } retc[j]='\0'; //printf("%s\n",retc); rc=&retc[0]; return rc;///出现乱码的原因是retc被销毁 } int main() { char str[50]="asqessafabna"; char c='a'; char *rc=deletechar(str,c); printf("%s\n",deletechar(str,c)); return 0; }
将函数中的代码改为static。
还是c语言基础不够牢固!