[英]C strlen wrong answer
我无法弄清楚我的代码出了什么问题
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,那么对于相同的单词“ hello”,我有
myWord length = 16
您的代码表现出未定义的行为 。 您正在返回指向在堆栈上声明的变量的指针。 在这种情况下, line
或result
。
两个可能的修复程序包括:
char line[SIZE];
readString()
函数的变量。 malloc()
在堆上为line
分配内存。 您返回一个动态值(分配的堆栈),该值由return
删除。 你应该
让调用者将字符串定义为
char * readstring(char * line, size_t size) { // Your stuff char * result = fgets(line, size); // ... return result; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.