打印字符数组(C)仅打印第一个字母
我需要手动填充一个字符数组。我是这样宣布的:打印字符数组(C)仅打印第一个字母,c,arrays,string,C,Arrays,String,我需要手动填充一个字符数组。我是这样宣布的: char* coor = malloc(sizeof(char) * 5); 然后我手动将每个变量分配到其位置: coor[0] = O_colum; coor[2] = ((char)(O_row+48)); coor[3] = '-'; coor[4] = D_colum; coor[5] = ((char)(D_row+48)); (D_行和O_行是整数,我需要字符形式的数字,而不是ASCII中的等效值;这就是为什么我要+48) 当我试
char* coor = malloc(sizeof(char) * 5);
然后我手动将每个变量分配到其位置:
coor[0] = O_colum;
coor[2] = ((char)(O_row+48));
coor[3] = '-';
coor[4] = D_colum;
coor[5] = ((char)(D_row+48));
(D_行
和O_行
是整数,我需要字符形式的数字,而不是ASCII中的等效值;这就是为什么我要+48
)
当我试图打印它时,问题就出现了。如果我使用printf(“%s”,coor)
它只打印第一个字符,我不知道为什么。我正在使用%s
,因此它应该打印字符串中的所有字符。
当我这样做时:
char *p = "hello";
printf("%s",p);
它确实会打印您的代码中有两个错误:
- 您正在跳过数组的位置1。这可能是 它只打印第一个元素的原因
- 您需要将结束字符串
添加到 绳子\0
char* coor = malloc(sizeof(char) * 6);
coor[0] = O_colum;
coor[1] = ((char)(O_row+48));
coor[2] = '-';
coor[3] = D_colum;
coor[4] = ((char)(D_row+48));
copr[5] = '\0';
五元素数组的最后一个索引是4,而不是5。。。您正在跳过元素1。另外,您需要在末尾使用空字节。。。因此,您应该分配6个字节,并将最后一个字节设置为0。OMG谢谢,修复了它,在这里写入元素1时跳过元素1是一个问题,但真正导致问题的是空字节!谢谢注:
sizeof(char)
与本标准定义的1
不会有任何区别。因此,使用它毫无益处。如果要始终使用正确的类型,请使用sizeof(*coor)
。