【问题标题】:I am unable to find out what is wrong with this c program it says **illegal hardware instruction**我无法找出这个 c 程序有什么问题,它说**非法硬件指令**
【发布时间】:2021-08-22 17:00:31
【问题描述】:

这是简单的c程序

#include <stdio.h>
#include <string.h>

int main()
{
   
    char str1[] = "sandeep";
    char str2[] = "sahani";
    strcat(str1, str2);
    printf("%s %s", str1, str2);

    return 0;
}

strcat(str1, str2); 行给出错误,但该行程序没有运行。

我使用的代码编辑器是 Mac OS

中的 VS code

【问题讨论】:

  • edit您的问题包含您在执行代码时收到的完整完整错误消息。还要详细解释你是如何编译和运行你的程序的。
  • 用你自己的话说,当你写char str1[] = "sandeep";时,你期望分配多少字节的存储空间来存储数据?为什么?如果您尝试将更多数据附加到末尾,您期望会发生什么?为什么?
  • C 中的字符串变量是 not 魔法容器,它会自动增长以容纳您尝试在其中容纳的任何字符串。在构造新字符串时——即使是在使用像 strcat 这样的库函数时——你的工作要确保分配了足够的内存来保存最终结果。
  • 您是否尝试将例如 strcat crash 放入搜索引擎,或查看 strcat 的文档,或在 Stack Overflow 上搜索?
  • @Carcigenicate 它工作了先生,感谢您的帮助。????

标签: c strcat


【解决方案1】:

这里有几个问题:

  1. 用静态数据初始化的字符数组应被视为只读,而不是更新。您不能只在其末尾添加更多字符。它可能会起作用,也可能会产生错误。未定义的行为。
  2. 您必须为目标字符串分配足够的内存来保存所有连接。
int main()
{
       
    char str1[] = "sandeep";
    char str2[] = "sahani";
    char str3[100] = {0};
    
    strcat(str3, str1);
    strcat(str3, str2);    
    printf("%s %s  %s", str1, str2,str3);

    return 0;
}

【讨论】:

  • 字符数组不是只读的。你在想char *str1 = "sandeep";
  • @Barmar 先生,您是对的,先生,我进行了更正,并且该程序正在运行:) 再次感谢。
【解决方案2】:

如果您不指定数组的大小,则该大小足以容纳正在初始化的值。所以str1 只有 8 个字符(7 个字符加上空终止符)。没有足够的空间添加sandeep

如果你想连接它,你需要它为额外的字符串留出空间。由于str2 是6 个字符,str1 至少需要14 个字符。所以改成:

char str1[14] = "sandeep";

【讨论】:

  • @LtWorf 首先,该标记 不表示正确性(它表示 OP 接受),其次您没有做任何解释你觉得这个答案有什么问题。
  • @LtWorf 在我发布我的答案之前他接受了这个答案。
猜你喜欢
  • 2011-04-23
  • 2022-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-27
  • 2014-04-28
相关资源
最近更新 更多