我有一个字符串数组,当我迭代并打印其元素时,我会得到意想不到的结果.
char currencies[][3] = {"EUR", "GBP", "USD", "JPY", "CNY"};
void show_currencies()
{
int i;
for(i=0; i<5; i++)
{
printf("%s - ", currencies[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
当我打电话时,show_currencies()我得到了输出.
EURGBPUSDJPYCNY - GBPUSDJPYCNY - USDJPYCNY - JPYCNY - CNY -
Run Code Online (Sandbox Code Playgroud)
谁能解释这种行为.
谢谢
Cha*_*tie 14
您缺少nul终止符,字符串实际上是4个字符长.然后每个字符串都在写入前一个字符串的null终止符*.尝试改为:
char currencies[][4] = {"EUR", "GBP", "USD", "JPY", "CNY"};
Run Code Online (Sandbox Code Playgroud)
*正如caf所指出的那样,它不是"过度写入前一个字符串的空终止符",因为空终止符永远不会被复制到数组中.字符串在最终' - '之后没有乱码输出是一个侥幸.
你宣布错了.这会奏效.它只是让编译器设置一个指向const-chars的指针数组:
const char *currencies[] = {"EUR", "GBP", "USD", "JPY", "CNY"};
Run Code Online (Sandbox Code Playgroud)
编辑:使它成为一个二维数组,就像Charles Beattie的答案一样,只要你为null分配空间,它也可以.另外,const根据Christoph 指定字符.
| 归档时间: |
|
| 查看次数: |
429 次 |
| 最近记录: |