【发布时间】:2011-01-22 19:54:00
【问题描述】:
我有一个字符串数组,当我遍历并打印它的元素时会给我带来意想不到的结果。
char currencies[][3] = {"EUR", "GBP", "USD", "JPY", "CNY"};
void show_currencies()
{
int i;
for(i=0; i<5; i++)
{
printf("%s - ", currencies[i]);
}
}
当我调用 show_currencies() 时,我会在输出中得到这个。
EURGBPUSDJPYCNY - GBPUSDJPYCNY - USDJPYCNY - JPYCNY - CNY -
谁能解释一下这种行为。
谢谢
【问题讨论】:
-
任何体面的编译器都应该为此给出错误或至少警告
-
@chapper, @martani:我手头没有 c 标准的副本,但我认为在这种情况下静默删除 NUL 字节是标准明确允许的。至少有一次,会有相当数量的代码使用这种技术来初始化固定大小的 char 数组,因为它比简单地逐个列出 char 值要简洁得多。