2011-11-23 84 views
4

下面的代碼是我的代碼保存爲.C它編譯罰款.cpp文件和.c文件編譯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

雖然它不會幫助你的問題,你可以選擇語言編譯版本。使用gcc它是-x標誌,需要遵循語言。像gcc -x c something.cpp ...將使用c編譯器進行編譯。

+0

這解決了我與代碼共享的問題。這將使我的整個代碼編譯爲C程序。有什麼辦法可以讓我的代碼的一部分在C模式下編譯。 – user1061410

+0

據我所知,只有當你在多個模塊(文件)中分割你的程序。 – dbrank0

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' } }; 
+1

嗯......發現這是downvoted。我很好奇爲什麼:) – sehe

+0

在第一個例子中,有一個級別的括號太多了! – bitmask

+0

@bitmask:對不起,錯過了,修復了 – sehe

14

字符串「12」在C++中佔有3個位置(在C中也是,BTW)。你需要一個字符來終止'\0'

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

C++比C的更嚴格的語言的問題是,創建包含的兩個字符數組的數組,然後分配給每個子陣列的三個字符(序列'1''2'和一個字符串結束'\0') 。

數組應聲明如下:

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

C編譯器不會標記這一點,並跳過字符串終止,所以您printf語句將字符串後最有可能的打印亂碼。

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++工作....