2016-12-06 49 views
0

私はこのコードを書いていますが、動作しませんが、* targと* sourをtarg []とsour []で置き換えたときに動作します。また、このような収束関数を呼び出すと、多くのエラーが表示されますconverge(*targ, *sour)。誰かが私にこれを理解するのを助けてください。このコードを理解するにはどうすればいいですか?

#include<stdio.h> 
#include<string.h> 
void converge(char *target, char *src); 
int main() 
{ 
    char *targ = "xxxxxxxxxxxxxxxxxxx"; 
    char *sour = "yyyyyyyyyyyyyyyyyyy"; 
    converge(targ, sour); 
    //printf("%s", targ); 
} 

void converge(char *target, char *src) 
{ 
    int i, j; 
    for(i=0,j=strlen(src); i<=j; i++, j--) 
    { 
     target[i]= src[i]; 
     target[j]= src[j]; 
     printf("%s\n",target); 
    } 
} 

答えて

0

あなたはこのような文字列を定義した場合:

char *targ = "abcd"; 

をポインタtargが上に格納されている間、文字列"abcd"は、読み出し専用メモリに格納されているので、それは、読み取り専用の値として扱われますあなたのスタック。コンパイラによっては、const char *targ = "abcd";を明示的に指定しない限り、警告が表示されることがあります。この場合、targ[i] = src[i];のような割り当ては許可されません。

あなたはこのような文字列を定義した場合:

char targ[] = "abcd"; 

文字アレイは、データ・スタック上に作成されますが、あなたのスタック上のデータを読み書き可能なであることから、この文字列は、変更することができます。さらに、配列の最初の要素にポインタとしてアクセスできます。

+0

あなたの答えをありがとう。 – Sujan

+0

私はこれを理解するのを手伝ってください。私はこのコードをコンパイルするとき の#include の#include = "xxxxxxxxxxxxxxxxxxx" INTメイン(){ \tのchar *のTARG(TEST.Cとして保存)。 printf( "%s"、* targ); } それは、この警告メッセージ\t [警告]「のchar *」に定数文字列からの変換を非推奨[-Wwrite-文字列] を示しており、私はこのコードを実行すると、それは、このメッセージ TEST.EXEが停止している私を見ます働いています – Sujan

+0

あなたは何を理解していませんか? – justarustyspoon

関連する問題