2017-11-08 2 views
0

スペースを入れた場所に " - "を印刷する代わりに、このプログラムを与えてスペースを " - "で置き換えるように関数を変更しました。関数を変更して文字列中のスペースを中間のケースに置き換える " - "

#include<stdio.h> 
void sp_to_dash(const char *s); 
int main(){ 
sp_to_dash("this is a test");//using the function 
return 0; 
}//end of main 
void sp_to_dash(const char *str){//start of the function 
while(*str){//start of while 

     if(*str==' ')printf("%c",'-'); 
     else printf("%c",*str); 
     str++; 
    }//end of while 
}//end of function 

と私は実際にそれを変更しなかったし、それが働いたがsmiliarのように:

#include<stdio.h> 
    void sp_to_dash(char *s); 
    int main() { 
     char str[] = "this is a test"; 
     sp_to_dash(str); 
     printf("%s", str); 
     getchar(); 
    return 0; 
}//end of main 
void sp_to_dash(char *str){ 
while (*str) { 
    if (*str == ' ') *str= '-'; 
    str++; 
    }//enf of while 
}//end of sp_to_dash 

は今、私はすぐに機能に送信元のコード(そのまま1)で、何かを理解しません文字列とそれを受け入れて2番目のコード(変更された1) 私は新しい文字列それは受け入れることのために:私はこれに似たようなことができなかった理由を

char str[]="this is a test"; 

#include<stdio.h> 
void sp_to_dash(char *s); 
    int main() { 
    sp_to_dash("this is a string"); 
    return 0; 
}//end of main 
void sp_to_dash(char *str){ 
while (*str) { 
    if (*str == ' ') *str= '-'; 
    str++; 
    }//enf of while 
}//end of sp_to_dash 
+0

文字列リテラルは読み取り専用で、SOおよび/またはgoogleで検索します。 –

答えて

0

文字列リテラルがconst char *のように定義されているためだ、あなたを意味し、変更することはできません、それはコンテンツです。 のようなコンパイルエラーが「const char *からchar *へ」から変換できないと思います。そのような場合は、定義されていない動作につながるので、(char *)にキャストしてコンパイラをだますことをお勧めしません。

あなたがchar str[]="this is a test";として、あなたの文字列を定義したら、実際にcharの配列を作成し、(最後に\0で)に応じて「これはテストです」の文字が含まれているために、それを初期化します。

この配列内の任意の要素へのポインタのタイプはchar *なので、コンパイルは正常に終了しました。

+0

パーフェクト!今はすべてが意味をなさない!thanks alot man – CLearner

関連する問題