提供指向字符串的指针数组作为输入。任务是反转存储在指针输入数组中的每个字符串。我创建了一个名为reverseString()的函数,它反转传递给它的字符串。据我所知,这个功能正常工作。
指针输入数组中存储/引用的字符串逐个发送到reverseString()函数。但是当使用临时变量交换传递的字符串的值时,代码在reverseString()函数中的某个点挂起。我无法弄清楚为什么代码在交换值时挂起。请帮帮我。
代码如下:
#include <stdio.h>
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
答案 0 :(得分:6)
您正在尝试更改字符串文字。
字符串文字通常不可修改,实际上应该声明为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个字节。
答案 1 :(得分:2)
字符串(“abcde”等)可以存储在只读存储器中。因此,当您尝试修改这些字符串时,一切皆有可能。指向字符串的指针是可修改的;它只是字符串本身不是。
您应该包含<string.h>
以获取strlen(3)
的声明,并使用另一个标头来获取函数getch()
- 它不在我的MacOS X系统上的<stdio.h>
中(所以我删除了调用;它可能在Windows上的<stdio.h>
或<conio.h>
中声明。
答案 2 :(得分:0)
希望这对你有所帮助!我在这里做的是,我将转到字符串中最后一个字符的地址,然后通过将指针减少1个单位来打印它们(对于字符,它的2个字节(请检查))。
//program to reverse the strings in an array of pointers
#include<stdio.h>
#include<string.h>
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++;
}
}