Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序设计-“;堆栈周围的变量已损坏";_C_String - Fatal编程技术网

C程序设计-“;堆栈周围的变量已损坏";

C程序设计-“;堆栈周围的变量已损坏";,c,string,C,String,一个愚蠢的问题,但不能使它起作用 printf("Enter the string!\n"); char str[5],ch; gets(str); printf("%s\n" , str); int i, c; //int n = strlen(str); for (i = 0; i <= strlen(str)-1; i++) { ch = str[(strlen(str)-1)-i]; printf("%c", ch); } printf(“输入字符串!\n”

一个愚蠢的问题,但不能使它起作用

 printf("Enter the string!\n");
char str[5],ch;
gets(str);
printf("%s\n" , str);
int i, c;
//int n = strlen(str);
for (i = 0; i <= strlen(str)-1; i++)
{

    ch = str[(strlen(str)-1)-i];
    printf("%c", ch);

}
printf(“输入字符串!\n”);
char-str[5],ch;
获取(str);
printf(“%s\n”,str);
int i,c;
//int n=strlen(str);

对于(i=0;i
gets
NULL)终止字符串,它将进行存储。这是-在字符串末尾再添加一个字符
\0
。因此,这意味着输入
5
字符字符串时,
str
必须至少为
6


例如,
“01234”
是6个字节:
'0'
'1'
'2'
'3'
'4'
\0

如果字符串的元素是
01234
,则在
str变量中需要6个字节(5个字符+/code>\0',因此将
变量设为
而不是
[5]`

这里发生的事情是,
get()
写过了
str
的末尾,破坏了内存,可能是编译器放在那里的一些“魔法”值,因此函数可以检查这些魔法数字是否仍然存在,如果没有,则触发刚才看到的错误

一条建议:永远不要使用
get()
来输入字符串。

您应该将str定义为长度6(因为尾随的“\0”表示字符串的结尾)。因此,当我初始化字符串时,它应该是我想要的长度的+1?并且不使用gets(),请使用fgets,将要读取的最大字符数作为参数之一。