打印字符数组(C语言)只打印第一个字母

3

我需要手动填充一个字符数组。我是这样声明它的:

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_RowO_row都是整数,我需要将这个数字以字符形式输出,而不是ASCII码的等价值;所以我将其加上了+48。)
问题出现在我尝试打印时。如果我使用printf(" %s", coor) ,它只会打印出前几个字符,我不知道为什么。我使用的是%s,所以应该打印字符串中所有的字符。 当我这样做时:
char *p = "hello";
printf("%s",p);

它会打印出hello


9
一个有5个元素的数组的最后一个索引是4,而不是5...并且你跳过了第1个元素。同时,在结尾需要一个空字节...因此你应该分配6个字节,并将最后一个字节设置为0。 - Dmitri
哦,谢谢,问题解决了。在这里跳过元素1是一个问题,但实际上是空字节导致了问题!谢谢! - LittnerDiAzure
1
注意:sizeof(char)永远不会与标准定义的1不同。因此使用它没有任何好处。如果您想始终使用正确的类型,请使用sizeof(*coor) - too honest for this site
1个回答

2

您的代码有两个错误:

  • 您跳过了数组的第一个位置。这可能是仅打印第一个元素的原因。
  • 您需要在字符串末尾添加结束字符\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';

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