c 从指针打印

c print from a pointer

我正在尝试将整数存储在指针中,像使用数组一样使用它。但是下面的代码在终端中产生了小矩阵,我不知道为什么。这是我的代码

int main(int argc, char const *argv[])
{
    char pointer[7];
    for (int i = 0; i < 3; i++)
    {
        *(pointer+i) = 2;
    }

    printf("%s%d\n", "the string length is ",strlen(pointer));
    for (int j = 0; j < 3; j++)
    {
        printf("%c\n", *(pointer+j));
    }
    return 0;
}

谁能告诉我问题出在哪里,以及解决方案? 谢谢

有几个问题:

  1. 当输入未正确终止 '[=11=]' 而您的数组未正确终止时,您不能使用 strlen()。该调用给出了未定义的行为。
  2. 打印代码点为 2 的字符可能会使您的终端表现得很滑稽,因为它不是可打印的字符。您应该使用 %d 并转换为 (int).

另请注意,如果将 *(pointer + i) 写成 pointer[i]

更清晰

看来你的意思如下:)

int main(int argc, char const *argv[])
{
    char pointer[7] = { '[=10=]' };
    for (int i = 0; i < 3; i++)
    {
        *(pointer+i) = '2';
    }

    printf("%s%zu\n", "the string length is ",strlen(pointer));
    for (int j = 0; j < 3; j++)
    {
        printf("%c\n", *(pointer+j));
    }
    return 0;
}

这条语句之后

    char pointer[7] = { '[=11=]' };

数组指针的所有元素都初始化为零。因此,您可以使用应用于此数组的标准函数 strlen

函数 strlen 有 return 类型 size_t 所以最好使用格式字符串 %zu

在此声明中

        *(pointer+i) = '2';

字符“2”已分配给数组的元素,因此当您打印它们时,您确实会在控制台上看到字符 2。

        printf("%c\n", *(pointer+j));

如果你想处理指针那么例如这个循环

    for (int j = 0; j < 3; j++)
    {
        printf("%c\n", *(pointer+j));
    }

你可以这样重写

    for ( char *p = pointer; *p; ++p )
    {
        printf("%c\n", *p);
    }