以下是我的代码保存为.cpp文件和.c文件
在.c中编译正常,但在.cpp
中抛出了以下错误test.cpp:6: error: initializer-string for array of chars is too long
test.cpp:6: error: initializer-string for array of chars is too long
#include< stdio.h>
int main()
{
char str[2][2]= { "12", "12"};
int i;
for(i=0; i<2; i++)
printf("%d %s\n", i, str[i]);
return 0;
}
是否有任何编译器指令或任何内容,以便c ++编译器将其作为C代码本身。
我试过,extern“C”,但没有帮助。
答案 0 :(得分:14)
字符串“12”在C ++中保持3个位置(在C中也是BTW)。您需要多一个字符来终止'\0'
。
char str[2][3]= { "12", "12"};
答案 1 :(得分:10)
这将“适合”
char str[2][2] = {
{ '1', '2' },
{ '1', '2' }
};
但你想要这个:https://ideone.com/wZB8F
char str[2][3]= { "12", "12"};
否则,没有空间终止null
字符
等效:
char str[2][3]= { { '1', '2', '\0' },
{ '1', '2', '\0' } };
答案 2 :(得分:1)
C ++是一种比C语言更严格的语言。问题是你创建了一个包含两个字符数组的数组,然后为每个子数组分配三个字符(序列'1'
,'2'
和字符串终止符'\0'
)。
数组应该像这样声明:
char str[2][3]= { "12", "12"};
C编译器没有为此标记,并跳过字符串终止符,因此您的printf
语句很可能在字符串后打印垃圾。
答案 3 :(得分:0)
#include< stdio.h>
int main()
{
char str[][3]= { "12","12"};
int i;
for(i=0; i<2; i++)
{
printf("%d %s\n", i, str[i]);
}
return 0;
}
是可以在C ++中使用的版本....
答案 4 :(得分:0)
虽然它对您的问题没有帮助,但您可以选择要编译的语言。使用gcc它是-x标志,需要后跟语言。像gcc -x c something.cpp ...将使用c编译器进行编译。