提问人:Emiya 提问时间:9/19/2023 更新时间:9/19/2023 访问量:53
为什么字符串缓冲区的溢出会导致 C 语言中的奇怪行为?[复制]
Why does the overflow of string's buffer result in the weird behavior in C? [duplicate]
问:
我刚刚开始学习 C 编程语言,并正在测试一些控制流、stdio 功能。
这是我的代码:
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv) {
char b[5], c[5];
char arr[2][5];
printf("Enter the first string: ");
scanf("%s", b);
printf("b -> %s\n", b);
strcpy(arr[0], b);
printf("arr[0] -> %s\n", arr[0]);
printf("Enter the second string: ");
scanf("%s", c);
printf("c -> %s\n", c);
strcpy(arr[1], c);
printf("arr[1] -> %s\n", arr[1]);
for (int i = 0; i < 2; i++) {
printf("%d -> %s\n", i, arr[i]);
}
if (strcmp(b, c) == 0) {
printf("Strings %s and %s are the same.\n", b, c);
} else {
printf("Strings %s and %s are not the same.\n", b, c);
}
return 0;
}
我遇到的问题是缓冲区溢出,也就是当我输入带有 5 个字符的字符串时,最初它会正确显示它,但在程序接近尾声时,结果变得一团糟。
在循环正确执行工作之前打印变量(假设我为两者提供输入字符串):for
somew
b -> somew
arr[0] -> somew
c -> somew
arr[1] -> somew
但是,在循环中,打印的结果是:for
0 -> somewsomew
1 -> somew
最后,最后的比较打印:
Strings and somew are not the same.
我读到其中的字符串是,因此提供长度为 4 的单词,例如,解决了这个问题,我只想知道例如在循环中我是如何得到结果的,以及为什么变量在上次比较中是空的。C
null terminated
for
0 -> somewsomew
b
答: 暂无答案
评论