我编写了以下代码来反转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;
}
答案 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;
}