好吧,到目前为止这是我的代码
int main()
{
char buffer[10];
int arraySize = -1;
FILE *fp;
int i;
char filename[10];
int userNo = 1;
char stockArray[18][15];
sprintf(filename, "file%d", userNo);
fp = fopen(filename, "r");
while(fgets(buffer, 30, fp) != NULL)
{
if(buffer[0] == '<' && buffer[1] == 's')
{
arraySize++;
}
else if(buffer[0] == '<' && buffer[1] == '/'){printf("< char\n");}
else
{
int t = 0;
int r = 0;
while(buffer[t] != '>')
{
t++;
}
t++;
char holder[15] = {'\0'};
while(buffer[t] != '<')
{
holder[r] = buffer[t];
t++;
r++;
}
strncpy(stockArray[arraySize], holder, r);
printf("%s\n", stockArray[arraySize]);
}
}
fclose(fp);
}
我遇到了两个奇怪的问题。首先,当我执行printf语句时,它会正确打印正确的数据,然后执行以下操作:如果第一个单词是“banana”而下一个单词是“123”则打印“123ana”然后是一堆奇怪的字符结束了,我哄骗你,一个笑脸。
然后,在程序完成并完成后,我得到“运行时检查失败#2 - 变量'文件'周围的堆栈已损坏。”错误。
我正在使用VS2010和C ++,到目前为止我所有的经验都来自GCC和C,我以前从未遇到过这些问题。任何建议将不胜感激
答案 0 :(得分:7)
您的输入缓冲区长度为10个字符
char buffer[10];
但是你告诉fgets最多可以读取30个字符进入缓冲区
fgets(buffer, 30, fp)
这可能会产生“有趣”的效果!
答案 1 :(得分:2)
我在视觉检查中认识到的一件事是你的holder
没有正确地以空值终止。您可以添加一行
holder[r++] = '\0';
在你的while循环之后。
答案 2 :(得分:0)
很难指出问题,而不了解你究竟在做什么,以及文件包含的内容。
但我仍然建议一件事并尝试:
strncpy(stockArray[arraySize], holder, r);
stockArray[arraySize][r] = '\0'; //do this before printf!
通常,确保所有c字符串都以空值终止。否则你将面临由于缺乏空字符而产生的常见问题。