簡體   English   中英

反轉c中的字符串會導致分段錯誤

[英]Reversing a string in c results in segmentation fault

我試圖在c中反轉一個字符串,但是我遇到了段錯誤,核心轉儲錯誤,無法找出錯誤。

#include<stdio.h>
#include<string.h>

void main(){
    char inputstr[100];
    int i = 0;
    char revstr[100];

    printf("Give me something to reverse!!:\t");
    gets(inputstr);
    printf("You entered %s\n", inputstr);

    int lenstr = strlen(inputstr) - 1;


    while(lenstr >= i){
        strcpy(revstr, inputstr[lenstr]);
        lenstr = lenstr -1; 
    }

    printf("%s\n", revstr);
}

我正在嘗試在c中反轉字符串,但是我得到了分段

strcpy()用於將字符串復制到目標字符串。 因此,參數為char*const char* 但是在您的代碼中,您正在發送一個char作為strcpy()函數的第二個參數。

您完全不需要使用strcpy()函數來反轉字符串,只需一個for循環就足以實現反轉字符串。

for循環示例:

for (i = 0; i <= lenstr; i++) 
{ 
    revstr[i] = inputstr[lenstr - i]; 
} 
revstr[i] = '\0';

strcpy()應該做什么?

這是我的反向版本:

void reverse(char * s, int len)
{
    char c,*end =s+len-1;
    while (s<end)
    {
       c=*s;
       *s++=*end;
       *end--=c;
     }
}

使用XOR,您可以避免聲明臨時c變量...但是它不可重定義,我很想知道是否可以改善性能...我選擇傳遞len,而不是在內部進行計算,因為您可以反轉子字符串,或者因為長度已經可用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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