nam*_*run 3 c string gcc strlen calloc
如果我的字符串在此程序中超过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));
}
Run Code Online (Sandbox Code Playgroud)
谢谢
blargman
您没有收到编译器错误,因为语法是正确的.什么是不正确的逻辑,你得到的是未定义的行为,因为你写入缓冲区末尾的内存.
为什么它是未定义的行为?好吧,你没有分配那个内存,这意味着它不属于你 - 你正在进入一个被警告磁带封闭的区域.考虑您的程序是否在缓冲区之后直接使用内存.您现在已经覆盖了该内存,因为您占用了缓冲区.
考虑使用像这样的大小说明符:
scanf("%9s", aString);
Run Code Online (Sandbox Code Playgroud)
所以你不要超过你的缓冲区.
| 归档时间: |
|
| 查看次数: |
9880 次 |
| 最近记录: |