[英]Access violation writing location?
我正在嘗試編寫一個函數來反轉字符串,但是我在執行此操作時遇到了這樣的異常:* str ++ = * end; 誰知道是什么原因? 提前致謝。
void reverse(char* str)
{
char *end = str;
char temp;
if(str)
{
while(*end)
{
end++;
}
end--;
while(str<end)
{
temp = *str;
*str++ = *end;
*end--=temp;
}
}
}
您可能使用字符串文字調用了該函數:
reverse("ablewasiereisawelba");
您必須先調用未定義的行為才能修改字符串文字,並且崩潰是對嘗試修改字符串文字的有效回應。 確保您改為傳遞非常量數組:
char palindrome[] = "ablewasiereisawelba";
reverse(palindrome);
C ++ 2011標准ISO / IEC 14882:2011指出:
2.14.5字符串文字[lex.string]
¶12嘗試修改字符串文字的效果是不確定的。
通常,字符串文字被放置在只讀存儲器中,而嘗試修改它會導致“崩潰”。 對於調用不確定的行為,這當然是一個完全合法的回應。
因此,您需要這樣做:
char str[] = "My string to reverse!";
reverse(str);
這意味着str
存儲在可修改的內存中。 大多數現代編譯器都將文字字符串存儲在字符串中(即“引號中的所有內容”都位於只讀存儲器中,因為您無意修改原始字符串)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.