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;igets
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,将要读取的最大字符数作为参数之一。