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

标签 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;
}

enter image description here

最佳答案

字符串需要以 \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;
}

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

这将导致
char arr[4] = {'a', 'b', 'c', 0};

看看其他地方是怎么填的0所以你不必自己设置。

关于c - 打印一个字符数组,但不希望结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60393990/

相关文章:

c - 为什么增加 float 会产生与预期不同的结果?

c - 尝试使用 Open Function 调用时出现错误消息

c - 使用getchar输入字符串

arrays - Powershell CSV嵌套哈希表/数组查找

c# - 将一维数组的索引转换为二维数组 i。 e.行和列

c - 当字符串为 char * 时,strtok_s 使程序崩溃

c - 最适合基于前缀的搜索的数据结构

C:双指针的重新分配问题

c# - 按钮数组的 NullReferenceException

java - 来自Java,学习C++——理解函数指针