[英]Segmentation fault when trying to copy elements of a string (C)
我正在嘗試解決一個學校上的問題,該問題要求我在適當的地方扭轉弦(等等)。 我已經為此苦苦掙扎了一段時間,沒有想法..這是我的代碼:
void strRev(char*s)
{
int i = 0;
int length = strlen(s);
char*rev = (char*)malloc((length+1)*sizeof(char));
strcpy(rev,s);
for(i;i<length;i++)
s[i] = rev[length - 1 - i];
printf("%s %s",rev,s);
}
int main()
{
char * test = "hello";
strRev(test);
}
當我在Visual Studio中逐步執行時,到達for循環內的行時它掛起。 Unix給我一個分割錯誤。 我知道這一定是簡單的事情,我很想念,但是我沒有想法,網上的答案也無濟於事。而且我的時間不多了。請有人啟發我,我在做什么錯了?
好吧,您的代碼沒有就位(否則您將不會使用malloc,為什么還要使用sizeof(char)?)。
嘗試這個:
void strRev(char*s)
{
int i, len;
char tmp;
len = strlen(s);
for(i = 0; i < (len >> 1); ++i)
{
tmp = s[len - 1 - i];
s[len - 1 - i] = s[i];
s[i] = tmp;
}
}
然后根據注釋建議修改main()。
test
指向不可修改的靜態分配緩沖區。 然后通過分配s[i]=rev[...]
。 這會導致段錯誤。
我認為您想寫rev[i]=s[...]
。
如果需要就地執行操作,則可以動態地為"hello"
( strdup
)或在堆棧上分配內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.