4

以下是我保存为 .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 代码本身。

我试过了,外部“C”,但没有帮助。

4

5 回答 5

14

字符串“12”在 C++ 中占据 3 个位置(在 C 中也是如此,顺便说一句)。您还需要一个 char 来终止'\0'.

char str[2][3]= { "12", "12"};
于 2011-11-23T08:53:32.207 回答
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' } };
于 2011-11-23T08:52:56.790 回答
1

C++ 是一种比 C 更严格的语言。问题是您创建了一个包含两个字符数组的数组,然后为每个子数组分配三个字符(序列'1''2'字符串终止符'\0')。

数组应该这样声明:

char str[2][3]= { "12", "12"};

C 编译器不会对此进行标记,并跳过字符串终止符,因此您的printf语句很可能会在字符串之后打印垃圾。

于 2011-11-23T08:55:59.190 回答
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++ 中运行的版本....

于 2011-11-23T08:56:14.080 回答
0

尽管它对您的问题没有帮助,但您可以选择要编译的语言。使用 gcc 它是 -x 标志,后面需要跟语言。像 gcc -xc something.cpp ... 会使用c编译器来编译。

于 2011-11-23T09:07:44.853 回答