C:控制台输出中的垃圾字符

Mat*_*att 3 c pointers

我通过创建各种简单的函数来学习C指针.我刚刚创建了一个函数来反转char数组.它可以工作,但在输出后它还会显示一堆垃圾字符(见下面的截图).

截图

这是我的代码:

void reverseString();

int main()
{
    reverseString();

    system("PAUSE");
    return 0;
}

void reverseString()
{
    char string1[20], string2[20];
    char *ptr1, *ptr2;
    ptr1 = &string1[0];
    ptr2 = &string2[0];

    printf("Enter string: \n");
    scanf("%s", string1);

    int len1 = strlen(string1);

    int i;
    for (i = 0; i < len1; i++)
    {
        ptr2[i] = ptr1[len1 - i - 1];
    }

    printf("%s\n", string2);
}
Run Code Online (Sandbox Code Playgroud)

我该怎样摆脱垃圾字符?我的代码有什么问题,或者我只是为了某些东西或什么而负责?

Mys*_*ial 8

你忘了nul-terminate新字符串:

int i;
for (i = 0; i < len1; i++)
{
    ptr2[i] = ptr1[len1 - i - 1];
}

//  Add this
ptr2[i] = '\0';
Run Code Online (Sandbox Code Playgroud)

当你打印一个char*,它将继续阅读,直到它找到那个空字符.但是既然你把它遗弃了,它就会继续......

  • 有人说它至今仍在印刷! (3认同)