2012-03-06 3 views
0

私はこれら二つのポインタ、もPTRに割り当てられます私はに割り当てるすべての値アーメンアーメンPTRを、持っています。 PTRアーメンは別名を指定できどのようにこれらの2つのポインタのエイリアスですか?

?そう

void func(const char *ptr) 
{ 
    struct samp *test; 
    DIR *dp; 
    char *amen; 
    if(ptr[0]=='c'||ptr[0]=='C') 
    strcpy(amen,"c_amen.txt"); 
    else if() 
    ...... 
    else 
    ... 
} 

FUNCFUNC( "C")と呼ばれている場合、PTRはすぐに4

プラス、constのは何のためにあるのです行の後アーメンと同じ谷を持っているのだろうか? ptrが内部で変更されないようにしてくださいfunc

+3

segfault alert 'strcpy(amen、 "c_amen.txt");' – MByD

答えて

1

次の行が間違っているとして、現在あなたが行動を仮定できず:

char *amen; 
// ... 
strcpy(amen,"c_amen.txt"); 

あなたはstrcpyに初期化されていないポインタを渡しているので、あなたは(それが先のポインタであることを期待することを修正する必要がありますコピーされた文字列を保持するのに適切なサイズ)。

これが修正された後、はい、amenは同じ内容の文字列を指します。もちろん、関数呼び出しが終了した後にクリーンアップされるので、それほど有用ではありません。文字列のサイズを渡すか、ptrstrlenを呼び出して、割り当てるバッファの大きさを把握する必要があります。

constという意味では、ポインタが指すコンテンツを変更することはできません。つまり、データは読み取り専用です。ポインタ自体はconstではありません。

関連する問題