【问题标题】:Why do I get some arbitrary number when I try to print my (copied) string?当我尝试打印(复制的)字符串时,为什么会得到一些任意数字?
【发布时间】:2019-02-11 23:57:14
【问题描述】:

我有这个结构:

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)  

【问题讨论】:

  • memcpy(c.name, list_of_names[0], 9); 似乎是正确的。请发布您的其余代码(minimal reproducible example),因为该错误可能在其他地方。
  • 您还没有向我们展示输出c.name 的代码。请发帖minimal reproducible example
  • 你的意思是strcpy; strcmp 不起作用。
  • 如果要打印字符串,请使用%s,而不是%d
  • 一个体面的编译器会警告你,如果你打开警告...提示提示。

标签: c pointers printf format-string


【解决方案1】:

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

【讨论】:

  • 非常感谢。 %d/%s 总是让我感到困惑,但现在我确定我会记住它!
  • @DarrelGulseth:如果您使用的是相对较新的编译器,请尝试启用所有警告(例如,-Wall -Wextra 与 GCC 或 clang) - 这应该会给您一个关于格式字符串不匹配的警告.
  • 知道了,试试看。再次感谢。
  • @DarrelGulseth:嗯,如果对您有帮助,您可以接受答案。
  • s 用于 string,d 用于 d小数(即以 10 为底)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 2021-05-31
  • 2017-11-22
  • 2010-11-16
  • 1970-01-01
  • 2021-02-20
相关资源
最近更新 更多