0

帮帮我..为什么这个C程序不反转字符串?它崩溃了……但是当我使用字符数组时,代码似乎可以正常工作……但是当我使用指向字符串的指针时……它会起鸡皮疙瘩……帮我解决这个问题……

#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);
}
4

1 回答 1

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;
}
于 2013-05-10T19:52:29.983 回答