我的结构中有两个字符串元素
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”的字符串 - 不要忘记末尾的隐式空终止符。
您特别观察到的是,缺少空终止符意味着输出函数(puts
、printf
或您正在使用的任何函数)继续读取字符串结束后的字符。在您的情况下, mydate
和 mytime
之间恰好没有任何填充,因此 mytime
中的值似乎是字符串也是如此。
请记住,由于数组在传递给函数时会衰减为指针,因此具有数组参数的函数无法知道何时完成读取数组;为此,空终止符充当哨兵值。
解决方案:增加 mydate
和 mytime
的大小以容纳空终止符。
关于C - 结构体字符串元素被连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55150544/