C反转字符串

时间:2013-05-10 19:51:03

标签: c pointers c-strings

帮帮我..为什么这个C程序没有反转字符串?  它崩溃了......但是当我使用一个字符数组时,代码似乎工作得很好..但是当我使用一个指向字符串的指针..给予goosebumps ...帮我解决这个问题..

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

int main(){

    char *String="gokul";
    char *Begin =String;
    char *End = String + strlen(String) - 1;
    char TempChar = '\0';

    while (Begin < End)
    {
        TempChar = *Begin;
        *Begin = *End;
        *End = TempChar;
        Begin++;
        End--;
    }
    puts(String);
}

1 个答案:

答案 0 :(得分:4)

问题是String指向一个字符串文字,它位于只读内存中。你仍然可以使用String的指针,但它必须指向可以修改的内存。

char gokul[] = "gokul";
char *String = gokul;

编辑以解决一些小问题。

您的程序中无需包含非标准标题conio.h

您的代码不处理String为NULL的情况。

如果String为空字符串,则您的循环在技术上是不正确的,因为End将指向字符串之前。

main()应该返回一个值,因为声明它会这样做。 0表示成功。较新的C编译器会知道最新的C标准允许程序在main()结束时不返回意味着为你隐式返回0。

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

int main(){

    char gokul[] = "gokul";    
    char *String=gokul;

    if (String && *String) {
        char *Begin =String;
        char *End = String + strlen(String) - 1;
        char TempChar = '\0';

        while (Begin < End)
        {
            TempChar = *Begin;
            *Begin = *End;
            *End = TempChar;
            Begin++;
            End--;
        }
        puts(String);
    }
    return 0;
}