我已经编写了反转字符串的代码。我认为逻辑是正确的。我可以编译它,但我无法运行它。我想在Windows上使用MinGW。有人能指出问题可能是什么吗?
void reverse(char * start, char * end){
char ch;
while(start != end){
ch = *start;
*start++ = *end;
*end-- = ch;
}
}
int main(){
char *c = (char *)"Career";
int length = strlen(c);
reverse(c,c+length-1);
}
由于
答案 0 :(得分:5)
您正在将文字传递给您的函数,并且尝试修改文字是未定义的行为。
制作一个可修改的字符串:
char c[] = "Career";
最重要的是,reverse
仅在字符串中包含奇数个字符时才有效。您的while
条件错误。它应该是:
while(start < end)
你的代码说:
while(start != end)
如果您的字符串具有偶数个字符,则该条件始终为true。因此循环直到你得到分段错误,因为start
和end
指向输入字符串之外。
答案 1 :(得分:4)
您无法更改字符串文字,因为它位于只读内存中。
尝试将c
声明为char c[] = "Career";
答案 2 :(得分:0)
您的代码无法编译的原因是您需要添加
#include <string.h>
到文件顶部,以定义strlen
函数。
另外
while(start != end){
生成
Segmentation fault (core dumped)
长度为偶数个字符串的错误。
将此更改为
while(start < end){
并且该错误将消失。
这是一个完整的工作版本:
#include <stdio.h>
#include <string.h>
void reverse(char * start, char * end){
char ch;
while(start < end){
ch = *start;
*start++ = *end;
*end-- = ch;
}
}
int main(){
char c[] = "Career";
int length = strlen(c);
reverse(c,c+length-1);
printf("c=%s\n", c);
}