每当我在输出中打印出多余的字符

时间:2019-01-30 08:02:57

标签: c

我正在尝试做一个FLAMES程序作为一项任务,由于我无法在此处准确地发布整个代码,因此我会键入似乎会导致我出错的代码部分,因为每当我打印出一些东西时,输出中会出现意外的多余字符。

我使用了与此类似的代码:

int main(){
    char chari[100], temp[100];
    int i, c;

    printf("Enter a name: \n");
    scanf(" %[^\n]s", chari);

    for (i=1; chari[i]!='\0'; i++)
    {
        printf("%i\n", i);
    }

    c = i;

    for (i=0; i<c; i++)
    {
        printf("%i < %i\n", i, c);
        temp[i] = chari[i];
    }

    printf("%s \n", temp);

    return 0;

}

我已经调整了几个小时的代码,但似乎仍然找不到问题。我还要计算字符串中的字母数,以便以后可以停止程序的某些部分。

输入:很酷

预期输出:很酷

实际输出:很酷(<-t

1 个答案:

答案 0 :(得分:2)

您忘记复制终止的空字符。

第一次循环后,c = i;保留0字节的索引。 在第二个循环中,您运行到i < c,即您不复制该0字节 在不终止nul的情况下,您的字符串只要在内存中找到另一个随机0字节即可。

在一个函数中,仅静态变量被初始化。因此,您的temp数组拥有不确定的值,并且您不能依赖在需要的地方获取0字符。

您需要再复制1个字节。