c - 由于 strcpy 和 strcat 导致的 Seg 错误
问题描述
为什么我在下面的代码中会出现 segfualt?我希望它打印第一个单词“嘿”。我知道还有其他方法可以做我想做的事情,但我想知道为什么会失败。请帮忙。
int main(){
char string[30], ops1[30], temp;
char t[2];
int op1, i=0;
strcpy(string, "hey ssup");
while(string[i] != '\0') {
if(string[i]!= ' '){
temp = string[i];
strcpy(ops1, &temp);
i++;
while(string[i] != ' ') {
temp = string[i];
strcpy(t, &temp);
strcat(ops1, t);
}
}
i++;
}
printf("%s", ops1);
return 0;
}
解决方案
如果是单个字符,则不需要strcpy()
和strcat()
。您可以通过index的帮助直接复制ops1[j] = string[i];
.
您也忘记添加ops1[j] = '\0';
字符串终止符。您需要指定\0
结束一个字符串。
你while(string[i] != ' ')
不会结束(is an infinite loop)
,因为i
在那个循环中没有改变。这个问题可以通过一个循环来解决。
试试这个代码: -
#include <stdio.h>
int main()
{
char string[30], ops1[30];
char t[2];
int op1, i, j;
strcpy(string, "hey ssup");
j = 0;
i = 0;
while (string[i] != '\0')
{
ops1[j++] = string[i]; // coping
if (string[i] == ' ') // stops when first ' ' found
{
break;
}
i++;
}
ops1[j] = '\0';
printf("%s", ops1);
return 0;
}
输出 :-
hey
推荐阅读
- excel - EXCEL - 通过在 2 个单元格中组合数字/字母来获取特定单元格的内容以获取内容的位置
- javascript - DataTables 过滤输入图像变化
- google-apps-script - 是否有一些方法可以在特定列的最后一行记录信息?
- android - Flutter 创建目录失败
- c++ - GTest - 如何通过 SetUp 方法准备数据以供多次使用?
- c++ - 在外部“C”声明中“玩”参数常量是否安全?
- python - Saleforce Simple Salesforce Python and Pandas - 如何将记录转换为数据框以放入表中
- arrays - 在 NASM 程序集中的数组地址处增加一个值
- powershell - Powershell脚本将具有大致相同名称的文件从文件夹复制到另一个文件夹
- ansible - 将列表中每个路径的基本名称保存到新列表