处理存储在C中多个字符串的指针数组中的单个字符串的问题

提供指向字符串的指针数组作为输入。 任务是反转存储在指针输入数组中的每个字符串。 我创建了一个名为reverseString()的函数,它反转传递给它的字符串。 据我所知,此function正常工作。

在指针的输入数组中存储/引用的字符串逐个发送到reverseString()函数。 但是当使用temp变量交换传递的字符串的值时,代码在reverseString()函数中的某个点挂起。 我无法弄清楚代码在交换值时挂起的原因。 请帮我解决一下这个。

代码如下:

#include  void reverseString(char*); int main() { char *s[] = {"abcde", "12345", "65gb"}; int i=0; for(i=0; i< (sizeof(s)/sizeof(s[0]) ); i++ ) { reverseString(s[i]); printf("\n%s\n", s[i]); } getch(); return 0; }//end main void reverseString(char *x) { int len = strlen(x)-1; int i=0; char temp; while(i <= len-i) { temp = x[i]; x[i] = x[len-i]; x[len-i] = temp; i++; } }//end reverseString 

您正在尝试更改字符串文字。

字符串文字通常是不可修改的,实际上应该声明为const

 const char *s[] = {"abcde", "12345", "65gb"}; /* pointers to string literals */ 

如果要创建可修改字符串数组,请尝试以下操作:

 char s[][24] = {"abcde", "12345", "65gb"}; /* non-readonly array initialized from string literals */ 

编译器将自动确定您需要3个字符串,但它无法确定每个字符串需要多长时间。 我把它们做成了24个字节。

字符串(“abcde”等)可以存储在只读存储器中。 因此,当您尝试修改这些字符串时,一切皆有可能。 指向字符串的指针是可修改的; 只是字符串本身不是。

您应该包含以获取strlen(3)的声明,并使用另一个头来获取函数getch() – 它不在我的MacOS X系统上的 (所以我删除了调用;它可能在Windows上的声明。

希望这对你有所帮助! 我在这里做的是,我要去字符串中的最后一个字符的地址然后通过将指针减少1个单位来打印它们(对于字符它的2个字节(请检查))。

 //program to reverse the strings in an array of pointers #include #include int main() { char *str[] = { "to err is human....", "But to really mess things up...", "One needs to know C!!" }; int i=0; //for different strings char *p; //declaring a pointer whose value i will be setting to the last character in //the respective string while(i<3) { p=str[i]+strlen(str[i])-1; while(*p!='\0') { printf("%c",*p); p--; } printf("\n"); i++; } }