我試圖通過void函數來反轉字符串,但是對於「str」它存儲的只讀內存(正如我從搜索現有的線程在論壇中所知)發生分段錯誤。修改char * str的內容
我試圖在「反向」函數中使用strcpy(copy,str),但它只是反轉新創建的char數組「copy」,它不能返回到main函數。我不想在反向函數中使用printf(「%s」,copy)來打印反轉的字符串。
反正是有扭轉str
- 沒有將其更改爲
char str[] = "Hello"
- 在不改變代碼
main()
功能 - 保持功能類型的
reverse()
作爲void
?
void reverse(char* str)
{
int l = strlen(str);
char temp;
int j = length - 1;
for (int i = 0; i < j; ++i)
{
temp = str[i];
str[i] = str[j];
str[j] = temp;
--j;
}
}
int main(int argc, char* argv[])
{
char* str = "Hello";
reverse(str);
printf("%s\n", str);
return 0;
}
可能重複或C++?](http://stackoverflow.com/questions/198199/how-do-you-reverse-a-string-in-place-in-c-or-c) – Parappa
簡答題(至少問題1& 3)是「否」。像這樣分配的「char *」將是隻讀的。你不能用當前的'reverse(char * str)'函數簽名來改變指針。你需要一個可寫的源數組,或者是一種反向分配新內存的方法(並且返回新的指針)。 – Joe
「Hello」是一個字符串常量,具有靜態作用域,因此編譯器可以將它放在只讀內存中。如果你想反轉它,你應該在main(使用strcpy)中複製數據並將指向複製數據的指針傳遞給reverse()。 – Parappa