错误:字符串在 C 中意外输出

Error: strings getting unexpected output in C

提问人:prit 提问时间:11/17/2023 最后编辑:Yunnoschprit 更新时间:11/17/2023 访问量:65

问:

/*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++”; 有什么方法可以解决它吗?

c 字符串

评论

1赞 Yunnosch 11/17/2023
@Jeevanebi 在改进帖子的赞赏努力中,请更加小心不适当和/或有害的格式。您在这里的编辑将输出引号变成了标题,引号格式化无益,在OP选择更阴沉的格式的情况下使用粗体......另一方面,我确实喜欢你改进的标题。

答:

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++;
    }

此外,您应该更改您的程序以使用 而不是 ,这已经弃用了一段时间。fgetsgets