我无法弄清楚我的代码有什么问题
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;
}
Run Code Online (Sandbox Code Playgroud)
如果printf1和printf2都没有注释,那么我得到真正的长度.例如,对于单词'hello',我有输出
line length = 6
myWord length = 6
Run Code Online (Sandbox Code Playgroud)
但是,如果我只评论printf1,对于同一个词'你好',我有
myWord length = 16
Run Code Online (Sandbox Code Playgroud)
您的代码显示未定义的行为.您正在返回指向堆栈上声明的变量的指针.在这种情况下,line
或result
.
两个可能的修复包括:
char line[SIZE];
变量传递给readString()
函数.line
堆上的内存malloc()
.