C语言中的 *char 指针和 char 数组的区别是什么?

3

我有一个*char指针和一个char数组。如何将指针的值放入char数组中?我尝试过

uint8_t i;
char a[10];
char *b = "abcdefghi";
for(i = 0; i < 9; i++)
{
    a[i] = b[i];
}
printf("%s", a);

但是这个并不起作用。


1
你可以使用sprintf(a, "%p", b);将指针存入缓冲区a中。但是,根据指针的大小,缓冲区可能不够宽。实际上,可以尝试使用snprintf(),这样会更安全。 - Ulrich Eckhardt
你所忽略的是C字符串以NULL结尾,实际上b包含"abcdefghi\0"。 - philippe lhardy
你可以这样写代码:for(i = 0; a[i] = b[i]; i++); - Ivan Ivanovich
3个回答

5
a的大小为10b的长度也是10(包括空终止符)。请更改。
for(i = 0; i < 9; i++)

to

for(i = 0; i < 10; i++)

是的,在C语言中,字符串以NULL结尾,最后一个字符为'0'。 - philippe lhardy
2
@philippelhardy 不是 '0',而是 '\0'0 - Jite
是的,我不应该使用封闭的'。0x0代表字节0。 - philippe lhardy
谢谢,这个答案真的很有帮助。但是有一个小错误,就像(i = 0; i <= 9; i++)一样。 - user4226872
1
@Rio 在基于C的语言中,i < 10i <= 9更清晰明了,因此更受欢迎。 - Yu Hao
根据我们的理解,您可以随意选择任何一种方式,两种都是完美的。 - user4226872

1
你所做的是正确的。
只需将for循环中的更改即可。
你的字符数组中有10个元素,数组索引从0-9

1
在每次迭代中使用 strlen() 是一个不好的主意。 - Ivan Ivanovich

-1

另一种变体:

#include <stdio.h>
int main(void)
{
    char a[10];
    char *c = a;
    char *b = "abcdefghi";
    for(; *c = *b; ++c, ++b);
    printf("%s", a);
    return 0;
}   

但是strcpy()在任何情况下都会更快,因为它通常是针对特定架构编写的汇编语言。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接