在C程序中查找反转字符串的错误

时间:2014-10-28 03:55:05

标签: c debugging

我编写了以下代码来反转String。但它给出了一些错误。它在调用reverseStr()函数后卡住了。我无法找到错误。有人能帮助我吗?

#include <stdio.h>
#include <stdlib.h>
char * reverseStr(char *str){
    int i,len = 0;
    while(str[len]!=NULL){
        len++;         
    }
    len-=1;char temp;
    for(i=0;i<len/2;i++){
        //printf("%d %d %s\n",i,len,str);
        temp = str[len-i];
        str[len-i]=str[i];
        str[i]=temp;
        //printf("%d %d %s\n",i,len,str);
    }
    return str;
}

int main(void) {
    char *str = "abcdefg";

    printf("Original :: %s\n",str);
    str = reverseStr(str);
    printf("Reversed :: %s",str);

    return 0;
}

2 个答案:

答案 0 :(得分:2)

char *str = "abcdefg";

将放置字符串文字&#34; abcdefg&#34;在内存的只读部分并使str指向该内存,对此内存的任何写入操作都是非法的,因此运行时错误。

使用char str[] = "abcdefg" ;,只需reverseStr(str);

现在你不能在这里做str = reverseStr(str) ;,因为类型不同,你可以将结果存储在另一个char指针中。

答案 1 :(得分:1)

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

void reverseStr(char *str){
    int i,len;
    len = strlen(str);
    char temp1,temp2;
    int j = len - 1;
    for(i=0;i<j/2 + j%2;i++){
        printf("%d %d %s\n",i,j,str);
        temp1 = str[j-i];
        temp2 = str[i];
        str[i]=temp1;
        str[j-i]=temp2;
        printf("%d %d %s\n",i,j,str);
    }
    return;
}

int main(void) {
    char str[10];
    strcpy(str,"abcdefgh");

    printf("Original :: %s\n",str);
    reverseStr(str);
    printf("Reversed :: %s",str);

    return 0;
}