我知道这是一个非常简单的代码,但是在打印数组的元素时,第4个元素将被打印两次,如下所示。
void printWeekDays(){
char days[7][9] = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
for(int i=0; i < 7; i++){
printf("%s \n",days[i]);
}
星期一
星期二
星期三星期四
星期四
星期五
星期六
星期天
这是我的环境:
Apple LLVM版本10.0.0(clang-1000.11.45.5)
目标:x86_64-apple-darwin17.7.0
答案 0 :(得分:3)
"Wednesday"
需要char[10]
来容纳\0
字符。
您得到奇怪的行为,因为printf
将在输入字符串中搜索\0
以停止打印,但是您的"wednesday"
没有附加\0
字符。
因此printf
继续打印,直到打印\0
后得到"thursday"
。
更改此
char days[7][9]
到
char days[7][10]
或
const char *days[7] //Compiler automatically adjust the size needed to store string literals.
答案 1 :(得分:0)
这是因为|emp_name|department|ann_leave|med_leave|cas_leave|org_ann_lv|org_med_lv|org_cas_lv|
| Tame | IT | | | 3 | | | 25 |
| Tame | IT | 4 | | | 20 | | |
| Tame | IT | | 3 | | | 30 | |
I want the query result like
|emp_name|department|ann_leave|med_leave|cas_leave|org_ann_lv|org_med_lv|org_cas_lv|
| Tame | IT | 4 | 3 | 3 | 20 | 30 | 25 |
不能包含9个字符。当然,星期三只有9个字母,但是在每个字符串的末尾都带有空终止符,即10个字符。发生的情况是,空终止符会从"Wednesday"
到T
的位置,并且将"Thursday"
写入其相应位置时,该空终止符会被覆盖。因此,当您尝试在星期三打印时,为什么两者都在彼此之后打印。它不会在星期三结束时停止,因为下一个空终止符在星期四结束。
要解决此问题,请更改以下内容:
"Thursday"
对此:
char days[7][9] = {
如果您不知道null终止符的工作原理,并且想了解更多信息,可以阅读here。