文字列反転によるchar str[]=「abc」とchar*str=「abc」思考
メモリ領域を分割せずに文字列反転関数を書き、ポインタの先頭と末尾の交換で反転を完了します.コードは次のとおりです.
コンパイル大丈夫、実行時プロンプト
gdbデバッグでこの行に問題が発生したことがわかりました
原因分析:
この声明では、「can i help you!」静的データ領域に格納され、グローバルであり、pはポインタ(スタックメモリに格納されている)にすぎず、この領域に値を付与しようとする操作は不正である.
推奨方法:
constを追加して宣言を表示
推荐阅读:char*p="abc"とchar p[]="abc"の区别関数の戻り値-ローカル変数の内容を返す
#include
#include
char *reverseString(char *str){
char *start=str;
char *end=start+strlen(str)-1;
char temp;
while(start < end)
{
temp=*start;
*start=*end;
*end=temp;
start++;
end--;
}
return str;
}
void PRINT(char *str){
int i=0;
while(*str != '\0')
{
printf("%c",*str++);
}
printf("
");
}
int main(){
char *Pstr="can i help you!";
//char str[]="can i help you!";
//char *Pstr=str;
char *strTemp;
PRINT(Pstr);
strTemp=reverseString(Pstr);
PRINT(strTemp);
return 0;
}
コンパイル大丈夫、実行時プロンプト
can i help you!
Segmentation fault (core dumped)
gdbデバッグでこの行に問題が発生したことがわかりました
*start=*end;
原因分析:
char *Pstr="can i help you!";
この声明では、「can i help you!」静的データ領域に格納され、グローバルであり、pはポインタ(スタックメモリに格納されている)にすぎず、この領域に値を付与しようとする操作は不正である.
推奨方法:
const char *Pstr="can i help you!";
constを追加して宣言を表示
推荐阅读:char*p="abc"とchar p[]="abc"の区别関数の戻り値-ローカル変数の内容を返す