【发布时间】:2023-01-14 01:27:42
【问题描述】:
我知道由于 NULL 字符,为字符串分配内存分配需要 n+1。但是,问题是如果分配了 10 个字符但输入了 11 个字符的字符串怎么办?
#include <stdlib.h>
int main(){
int n;
char *str;
printf("How long is your string? ");
scanf("%d", &n);
str = malloc(n+1);
if (str == NULL) printf("Uh oh.\n");
scanf("%s", str);
printf("Your string is: %s\n", str);
}
我尝试运行该程序,但结果仍然与 n+1 相同。
【问题讨论】:
-
“如果您分配 10 个字符但输入 11 个字符的字符串”你有未定义的行为所以不要让这种情况发生。您不能相信此类程序所做的任何事情。
-
程序询问你打算输入多长的字符串,你撒谎给它,告诉程序你只会输入 10 个字符,但实际上你输入了 11 个。那就是未定义的行为.任何事物能够发生。由于架构原因,最常见的结果是程序出现正常工作,即使不能保证行为。