2012-03-04 20 views
3
int A(const char* name){  
    name = "Here you GO!";  
    char* new_name;  
    //strcpy(new_name,name);  
    new_name = const_cast<char *>(name);  
    printf("%s\n", new_name);  
    return 0;  
} 

これは私がテストしているソースコードです。const char *をchar *に変換する際の問題

私はconst_cast<char *>を使用すると1つの問題は、それが宣言されていないと言います。 (私はそれが 'g ++'コンパイルの下で動作することができることを知っています) Antherの問題は、それらを一緒に組み合わせるためにstrcpyを使用しようとすると、セグメンテーションフォールトをポップアップさせます。 私はgcc whatevername.c -std=c99をコンパイルするために使用しなければなりません。

誰かがそれを解決する方法を提案していますか?多くの感謝..

+0

あなたは 'const_castをは'グラム++ 'の下で動作しますが、gcc'のCコンパイラの一部'の下で、あなたはそれがC++ではなくCであるという証拠のようなものを持っていない... – glglgl

答えて

7

int A(const char* name){ 
    name = "Here you GO!"; 

    char* new_name = strdup(name); 

    printf("%s\n", new_name); 
    return 0; 
} 

のstrdupの詳細については、この答えを()を参照してください:あなたは、malloc関数()を呼び出した後、()のstrcpyを使用するか、またはあなたのための両方のことを行うであろう)(のstrdupを呼び出すことができますいずれか新しい文字列にスペースを割り当てる必要があります。 const_castはC++のみであるため、strcpyを使用して正しい軌道に乗っていました。編集:さらに良い使用strdupミロスラフが示唆しているように。

int A(const char* name) 
{ 
    name = "Here you GO!"; 
    char* new_name = malloc(strlen(name)+1); 
    if (new_name) { 
     strcpy(new_name,name); 
     printf("%s\n", new_name); 
    } 
    return 0; 
] 
4

const_castはC + +のものです; Cに存在しません

strcpyを使用する場合は、初期化されていないポインタ(つまり、new_name)を使用することはできません。最初に十分な領域(malloc)を割り当ててから、完了するとその領域にはfreeのスペースを割り当てる必要があります。

1

new_nameにスペースを割り当てていません。あなたがそれにコピーしている文字列を保持するのに十分な量を割り当てます。

7

セグメンテーションフォルトが発生しています。なぜなら、new_nameはどこにも存在しないからです。

解決方法:new_nameにメモリを割り当てます。 https://stackoverflow.com/questions/252782/strdup-what-does-it-do-in-c

+1

'strdup'ことを確認した場合常に存在するとは限りません... –

関連する問題