use*_*058 4 c arrays undefined-behavior
int main(void)
{
char name1[5];
int count;
printf("Please enter names\n");
count = scanf("%s",name1);
printf("You entered name1 %s\n",name1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我输入超过5个字符时,它打印出我输入的字符,它超过5,但char数组声明为:
char name1[5];
Run Code Online (Sandbox Code Playgroud)
为什么会这样
Mic*_*ers 12
因为字符存储在"存储空间"之后的地址上.这非常危险,可能导致崩溃.
例如,假设您输入name:Michael,name1变量从0x1000开始.
name1: M i c h a e l \0
0x1000 0x1001 0x1002 0x1003 0x1004 0x1005 0x1006 0x1007
[................................]
Run Code Online (Sandbox Code Playgroud)
分配的空间显示为[...]这意味着从0x1005内存被覆盖.
解:
在复制之前,只复制5个字符(包括末尾的\ 0)或检查输入字符串的长度.
| 归档时间: |
|
| 查看次数: |
227 次 |
| 最近记录: |