【发布时间】:2012-12-02 17:32:07
【问题描述】:
我正在使用函数 gets() 来检索用户输入的字符串。然后我将该字符串存储到一个字符数组 char transdestmp[DESMAX] 中,其中 DESMAX 为 31。如果 variable_name 大于 30 个字符,则要求用户租用另一个字符串。否则,使用 strcpy() 将字符串复制到二维数组 char - acctdes[31][20] 中。
accttitle 收到 transdestmp[DESMAX]
void accttitle(char descr[DESMAX])
{
printf("\nEnter title for new account %d: ", transinpt);
gets(descr);
while(strlen(descr)>DESMAX){
printf(" **Title entered is longer than 30 characters\n");
printf(" Please reenter : ");
gets(descr);
}
strcpy(acctdes[transcntr],descr);
printf("---->vacctdes[transcntr]: %s\n", acctdes[transcntr]);
printf("---->vacctdes[transcntr-1]: %s\n", acctdes[transcntr-1]);
}
由于某种原因,当我输入一个长字符串,然后输入另一个字符串时,第二个字符串 acctdes[1] 的一部分会覆盖存储在 acctdes[0] 中的另一个字符串。
例如,
第一个输入: acctdes[0] = "这是一个长字符串"
有效...
第二次输入 acctdes[1] = "猴子"
有效...
但是,当我输出 acctdes[0] 时,acctdes[0] 似乎有一些来自 acctdes[1] 的值...比如输出 - 这是一个长和尚...
如果您想了解更多信息,请告诉我。提前致谢。
【问题讨论】:
-
当
transcntr为零时,您还将访问acctdes[-1],它不属于acctdes数组。 -
请执行谷歌搜索“莫里斯蠕虫”提示:strlen() 不会救你。
-
从不使用
gets()。它的接口已经无法修复,并且已从最新的 C 标准中删除。请改用fgets()。