提问人:prit 提问时间:11/17/2023 最后编辑:Yunnoschprit 更新时间:11/17/2023 访问量:65
错误:字符串在 C 中意外输出
Error: strings getting unexpected output in C
问:
/*write a program to insert a string into main string*/
#include <stdio.h>
int main()
{
char text[100], str[20], ins_text[100];
int i = 0, j = 0, k = 0, pos;
printf("enter main text: ");
gets(text);
printf("enter string to be inserted: ");
gets(str);
printf("enter the position to be inserted: ");
scanf("%d", &pos);
while (text[i] != '\0')
{
if (i == pos)
{
while (str[k] != '\0')
{
ins_text[j] = str[k];
j++;
k++;
}
}
else
{
ins_text[j] = text[i];
j++;
}
i++;
}
ins_text[j] = '\0';
printf("\n the new string is: ");
puts(ins_text);
return 0;
}
在航站楼中
$ ./a.exe
enter main text: newsman
enter string to be inserted: paper
enter the position to be inserted: 4
The new string is: `newspaperan`
在上面的最终输出中:-“新字符串是:newspaperan”缺少字母“m”。 我认为这是由于在 while 循环中增加“j++”; 有什么方法可以解决它吗?
答:
2赞
Jean-Baptiste Yunès
11/17/2023
#1
这是导致您问题的其他原因。当您在中间插入单词时,您必须像往常一样继续。
while (text[i] != '\0') {
if (i == pos) { // insert the word
while (str[k] != '\0') {
ins_text[j++] = str[k++];
}
}
ins_text[j++] = text[i++];
}
2赞
Tom Karzes
11/17/2023
#2
问题是您在插入字符串时跳过了当前字符。通过删除 ,而是始终执行复制当前字符的代码,可以很容易地解决此问题。因此,更正后的循环如下所示:else
while (text[i] != '\0')
{
if (i == pos)
{
while (str[k] != '\0')
{
ins_text[j] = str[k];
j++;
k++;
}
}
ins_text[j] = text[i];
j++;
i++;
}
此外,您应该更改您的程序以使用 而不是 ,这已经弃用了一段时间。fgets
gets
评论