簡體   English   中英

嘗試復制字符串元素(C)時出現分段錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM