打印一个字符数组,但不希望结尾

uly*_*is2 3 c arrays pointers

我不明白为什么在abc. 是什么原因?怎么只打印出来abc?谢谢!

#include <stdio.h>

int main()
{
    char arr[3];   
    char(*ptr)[3]; // declare a pointer to an array

    arr[0] = 'a';
    arr[1] = 'b';
    arr[2] = 'c'; 

    ptr = &arr; 
    printf("%s\n", arr);
    //printf("%s\n", ptr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

mjc*_*jcs 7

字符串需要以\0. 确保分配足够的空间来存储终止符。

#include <stdio.h>

int main()
{
    char arr[4];   
    char(*ptr)[4]; // declare a pointer to an array

    arr[0] = 'a';
    arr[1] = 'b';
    arr[2] = 'c'; 
    arr[3] = '\0'; // <-- terminator

    ptr = &arr; 
    printf("%s\n", arr);
    //printf("%s\n", ptr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请注意,使用char arr[4]您的数组中将包含随机内容。相反,如果你会使用

char arr[4] = "abc";
Run Code Online (Sandbox Code Playgroud)

这将导致

char arr[4] = {'a', 'b', 'c', 0};
Run Code Online (Sandbox Code Playgroud)

看看其他地方是如何填充的,0这样你就不必自己设置了。