c++ - Visual C++ 的奇怪错误

标签 c++ c visual-c++

好的,这是我到目前为止的代码

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,我以前从未遇到过这些问题。任何建议将不胜感激

最佳答案

你的输入缓冲区是 10 个字符长

char buffer[10];

但随后您告诉 fgets 将最多 30 个字符读入缓冲区

fgets(buffer, 30, fp)

这可能会产生“有趣”的效果!

关于c++ - Visual C++ 的奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6003189/

相关文章:

c++ - PeekNamedPipe 失败,但 GetLastError 返回 0

c++ - 计算 Caffe 中的前 5 错误率?

c - 将 printf 语句输出到 .txt 文件 C

java - 如何实时生成简单的二维图形?

c - 获取 : "unable to handle kernel paging request" when trying to read

c - 这是一个 VC 编译器错误吗?关于无符号整数包装

c++ - 使用汇编代码在 OpenGL 中呈现视频时出错

c++ - uint32_t vs uint_fast32_t vs uint_least32_t

visual-studio - '/fp :fast' and '/Za' not compatible Visual C++

c++ - 在 C++ 应用程序中链接到 C 库