我无法弄清楚我的代码有什么问题
char* readString() {
char* result;
char line[SIZE];
if(! fgets(line, sizeof(line), stdin))
fprintf(stderr, "error\n");
//printf 1
printf("line length = %lu\n", strlen(line));
result = line;
return result;
}
int main() {
char* myWord = readString();
unsigned long len = (unsigned)strlen(myWord);
//printf 2
printf("myWord length = %lu\n", len);
return 0;
}
如果printf1和printf2都被取消注释,那么我得到真正的长度。比如说'你好''我有输出
line length = 6
myWord length = 6
但如果我只评论printf1,那么同一个词'你好'我有
myWord length = 16
答案 0 :(得分:8)
您的代码展示未定义的行为。您正在返回指向堆栈上声明的变量的指针。在这种情况下,line
或result
。
两种可能的修复方法包括:
char line[SIZE];
变量传递给readString()
函数。line
在堆上为malloc()
分配内存。答案 1 :(得分:1)
返回由return
删除的动态值(已分配堆栈)。你应该
让调用者将字符串定义为
char * readstring(char * line, size_t size) {
// Your stuff
char * result = fgets(line, size);
// ...
return result;
}