我试图在指针中存储整数,像数组一样使用它。但是下面的代码在终端中生成小矩阵,我不知道为什么。这是我的代码
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;
}
有人可以告诉我问题是什么,请问解决方案? 感谢
答案 0 :(得分:2)
有几个问题:
strlen()
时,您无法使用'\0'
- 终止,而您的数组则不然。该调用给出了未定义的行为。2
的字符可能会使您的终端表现得很有趣,因为它不是可打印的字符。您应该使用%d
并转换为(int)
。另请注意,如果您将*(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);
}