我无法找出这个 c 程序有什么问题,它说**非法硬件指令**
I am unable to find out what is wrong with this c program it says **illegal hardware instruction**
这是简单的 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);
行给出错误,而没有此行程序正在运行。
我使用的代码编辑器是 VS code in Mac OS
这里有几个问题:
- 用静态数据初始化的字符数组应该被视为只读的,而不是更新的。您不能只在它的末尾添加更多字符。它可能会工作,也可能会产生错误。未定义的行为。
- 您必须为目标字符串分配足够的内存来容纳所有连接。
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;
}
如果您不指定数组的大小,则该大小刚好足以容纳它的初始化值。所以 str1
只有 8 个字符(7 个字符加上空终止符)。空间不足,无法添加 sandeep
。
如果你想连接它,你需要它有空间容纳额外的字符串。因为 str2
是 6 个字符,所以 str1
至少需要 14 个字符。所以将其更改为:
char str1[14] = "sandeep";
这是简单的 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);
行给出错误,而没有此行程序正在运行。
我使用的代码编辑器是 VS code in Mac OS
这里有几个问题:
- 用静态数据初始化的字符数组应该被视为只读的,而不是更新的。您不能只在它的末尾添加更多字符。它可能会工作,也可能会产生错误。未定义的行为。
- 您必须为目标字符串分配足够的内存来容纳所有连接。
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;
}
如果您不指定数组的大小,则该大小刚好足以容纳它的初始化值。所以 str1
只有 8 个字符(7 个字符加上空终止符)。空间不足,无法添加 sandeep
。
如果你想连接它,你需要它有空间容纳额外的字符串。因为 str2
是 6 个字符,所以 str1
至少需要 14 个字符。所以将其更改为:
char str1[14] = "sandeep";