C - 结构体字符串元素被连接

标签 c string struct

我的结构中有两个字符串元素

struct mystruct{
    char mydate[10];
    char mytime[5];
};

它们将分别存储“XX:YY”和“XX-YY-ZZZZ”类型的字符串。

但是当我为这些变量分配一些值时

struct mystruct *mystruct = (struct mystruct*)malloc(sizeof(struct mystruct));
strcpy(mystruct->mydate, "01-01-1970");
strcpy(mystruct->mytime, "00:01");

mydate 变量正在打印:

01-01-197000:01

我错过了什么吗?你能帮助我吗?谢谢安舞!

  • 已编辑并提供更多信息
  • 即使将尺寸增加一也不起作用

最佳答案

您的行为未定义,因为 mydate 中没有足够的空间来包含格式为“MM-DD-YYYY”的字符串 - 不要忘记末尾的隐式空终止符。

您特别观察到的是,缺少空终止符意味着输出函数(putsprintf 或您正在使用的任何函数)继续读取字符串结束后的字符。在您的情况下, mydatemytime 之间恰好没有任何填充,因此 mytime 中的值似乎是字符串也是如此。

请记住,由于数组在传递给函数时会衰减为指针,因此具有数组参数的函数无法知道何时完成读取数组;为此,空终止符充当哨兵值。

解决方案:增加 mydatemytime 的大小以容纳空终止符。

关于C - 结构体字符串元素被连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55150544/

相关文章:

我可以从线程函数中关闭/终止正在运行的线程吗?

c - 使用 autotools 构建动态程序列表

c - 在 C 中读取文件时出现段错误

struct - 如何在方案中实现Racket风格的结构?

c++ - 当我的结构中的任何变量发生变化时,有什么方法可以触发事件?

ios - Objective C计算器计数优先级

c - 从文件中获取数据并在每次新行开始时打印出来

Javascript 以 160 个字符拆分字符串并添加计数器?

java - 在 Java 中使用扫描器

c - 将变量分配给结构体数组的成员时出现预期标识符或 '(' 错误