c从指针打印

c从指针打印,c,pointers,C,Pointers,我试图将int存储在指针中,就像数组一样使用它。但是下面的代码在终端中生成小矩阵,我不知道为什么。这是我的密码 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(pointe

我试图将int存储在指针中,就像数组一样使用它。但是下面的代码在终端中生成小矩阵,我不知道为什么。这是我的密码

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;
}
int main(int argc,char const*argv[])
{
字符指针[7];
对于(int i=0;i<3;i++)
{
*(指针+i)=2;
}
printf(“%s%d\n”,“字符串长度为”,strlen(指针));
对于(int j=0;j<3;j++)
{
printf(“%c\n”,*(指针+j));
}
返回0;
}
有人能告诉我问题是什么,以及解决办法吗?
谢谢

有几个问题:

  • 当输入未正确终止且数组未正确终止时,不能使用strlen()。该调用提供未定义的行为
  • 打印代码点为
    2
    的字符可能会使您的终端表现得很滑稽,因为它不是可打印的字符。您应该使用
    %d
    并强制转换为
    (int)

  • 还要注意的是,如果您将
    *(指针+i)
    写成
    指针[i]

    的话,它会更清晰。您的意思似乎是:)

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

    函数
    strlen
    具有返回类型
    size\u t
    ,因此最好使用格式字符串
    %zu

    在这份声明中

        char pointer[7] = { '\0' };
    
            *(pointer+i) = '2';
    
    字符“2”被分配给数组的元素,因此当您打印它们时,您确实会在控制台上看到字符2

            printf("%c\n", *(pointer+j));
    
    如果你想处理指针,比如这个循环

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

    字符指针[7]
    是一个数组,不是指针!它的第一个元素是,但不是你可以发布输出的数组吗?“在终端中生成小矩阵”?那应该是什么?一般来说,我一点也不清楚你想要实现什么。为什么要使用
    *(指针+i)
    而不是更容易阅读的
    指针[i]
    ?也许你可以先告诉我们问题是什么?@JensGustedt小矩阵可能是他的终端对
    \x02
    “*它的第一个元素是,但不是数组*”不,它的第一个元素是
    字符,其他六个元素也是。
    
        for (int j = 0; j < 3; j++)
        {
            printf("%c\n", *(pointer+j));
        }
    
        for ( char *p = pointer; *p; ++p )
        {
            printf("%c\n", *p);
        }