尝试打印(复制的)字符串时,为什么会得到一些任意数字?

时间:2019-02-11 23:57:15

标签: c pointers printf format-string

我有这个结构:

struct car{
    char name[9];
};

我有这个数组:

char list_of_names[10][9] = {"toyota", "b", "c", "d", "e", "f", "g", "h", "i", "j"};

如您所见,我只输入了第一个元素。其余的现在填充。我正在尝试将第一个元素(丰田)复制到我的结构车“名称”变量中。这是我尝试过的:

//Initialize struct variable
struct car c;
memcpy(c.name, list_of_names[0], 9);

我也尝试过使用strcmp,但是每次尝试进行操作时,我在c.name中获得的输出始终是一些随机数。我什至尝试取消引用指针,例如:

memcpy(c.name, *(list_of_names[0]), 9);

但无济于事;错误是相同的。有什么建议么?谢谢!

修改

这是我所做的测试/打印操作:

struct car c;
memcpy(c.name, list_of_names[0], 9);
printf("printing!%d\n", c.name);

输出:

-13423455 (gibberish)  

1 个答案:

答案 0 :(得分:4)

您的格式字符串:"printing!%d\n"使printf()期望使用整数(%d)而不是字符串(%s)。那是你的错误。打印的是指向字符串中第一个元素的指针的截断部分,为有符号整数。