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;
}
谁能告诉我问题出在哪里,以及解决方案?
谢谢
有几个问题:
- 当输入未正确终止
'[=11=]'
而您的数组未正确终止时,您不能使用 strlen()
。该调用给出了未定义的行为。
- 打印代码点为
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);
}
我正在尝试将整数存储在指针中,像使用数组一样使用它。但是下面的代码在终端中产生了小矩阵,我不知道为什么。这是我的代码
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;
}
谁能告诉我问题出在哪里,以及解决方案? 谢谢
有几个问题:
- 当输入未正确终止
'[=11=]'
而您的数组未正确终止时,您不能使用strlen()
。该调用给出了未定义的行为。 - 打印代码点为
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);
}