帮帮我..为什么这个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);
}
答案 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;
}