如果我的字符串在此程序中超过9个字符,我不应该收到错误吗?
// CString.c
// 2.22.11
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
char *aString = calloc(10, sizeof(char));
if (aString == NULL)
{
return 1;
}
printf("PLEASE ENTER A WORD: ");
scanf("%s", aString);
printf("YOU TYPED IN: %s\n", aString);
//printf("STRING LENGTH: %i\n", strlen(aString));
}
由于
blargman
答案 0 :(得分:6)
由于语法正确,您不会收到编译器错误。什么是不正确的逻辑,你得到的是未定义的行为,因为你写入缓冲区末尾的内存。
为什么它是未定义的行为?嗯,你没有分配那个内存,这意味着它不属于你 - 你正在闯入一个用警告磁带封闭的区域。考虑您的程序是否在缓冲区之后直接使用内存。你现在已经覆盖了那个记忆,因为你占了你的缓冲区。
考虑使用像这样的大小说明符:
scanf("%9s", aString);
所以你不要超过你的缓冲区。
答案 1 :(得分:1)
是的,你收到了一个错误。而最不幸的是你不知道它。你可能会在以后的程序中知道它什么时候会发生神秘的事情(如果你很幸运),或者你的客户的律师来起诉你(如果你不是)。