c从指针打印

时间:2015-02-25 13:38:47

标签: c pointers

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

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

有人可以告诉我问题是什么,请问解决方案? 感谢

2 个答案:

答案 0 :(得分:2)

有几个问题:

  1. 当输入未正确strlen()时,您无法使用'\0' - 终止,而您的数组则不然。该调用给出了未定义的行为。
  2. 打印代码点为2的字符可能会使您的终端表现得很有趣,因为它不是可打印的字符。您应该使用%d并转换为(int)
  3. 另请注意,如果您将*(pointer + i)写为pointer[i],则{{1}} 更清晰

答案 1 :(得分:0)

看来你的意思是:)

int main(int argc, char const *argv[])
{
    char pointer[7] = { '\0' };
    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] = { '\0' };

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

函数strlen的返回类型为size_t,因此最好使用格式字符串%zu

在本声明中

        *(pointer+i) = '2';

字符&#39; 2&#39;被分配给数组的元素,所以当你打印它们时,你确实会在控制台上看到字符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);
    }
相关问题