【问题标题】:string run time error working only with getchar why?字符串运行时错误仅适用于 getchar 为什么?
【发布时间】:2017-03-13 09:29:04
【问题描述】:

我正在使用 visual studio 2013 for desktop,但我运行时失败并出现字符串我不知道为什么这不起作用。

    int main(void)
    {
         char string[MAX1] = "THANK ";
         char you[MAX2] = "u";
         strncat(string, you, 1); //without fix this line or the next one
         printMessage(string); 
         return 0;
    }

只有当我把 getchar 放在最后时它才会运行。 它可以与notepad++等其他程序一起使用。

MAX1=7。 MAX2=2。

【问题讨论】:

  • MAX 是什么?我敢打赌它不到 7...
  • MAX 必须是 >= 8 才能存储尾随的 NUL
  • print.Message 没有闻到 C .....
  • @SouravGhosh - 现在,现在。它可能是一个全局对象,其字段是函数指针,不是吗:P
  • notepad++...我是说真的吗?

标签: c string visual-studio-2013 getchar


【解决方案1】:

string[] 的连接内容(如果有效)将是 THANK u'\0' I.E. 8 个字符。

但是,只分配了 7 个字符。

对 strcat() 的调用不会停止,因此写入超出了数组 string[] 的范围。结果是未定义的行为,并可能导致段错误事件。

但是,当使用 strncat() 时,不会复制尾随 NUL 字节。所以 string[] 现在是一个未终止的 char 数组。并且对 printMessage() 的调用将不知道在哪里停止打印字符,同样是未定义的行为。

【讨论】:

    猜你喜欢
    • 2020-05-08
    • 2010-11-19
    • 2019-05-22
    • 2019-03-06
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多