C strlen错误的答案

Val*_*riy 1 c char strlen

我无法弄清楚我的代码有什么问题

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)

Bil*_*nch 8

您的代码显示未定义的行为.您正在返回指向堆栈上声明的变量的指针.在这种情况下,lineresult.

两个可能的修复包括:

  1. char line[SIZE];变量传递给readString()函数.
  2. 使用分配line堆上的内存malloc().