我正在尝试编写一个可以反转字符串内容的函数。但是当我运行程序时,它无法正常工作...... 所以我的问题是: 有人能告诉我这段代码有什么问题吗?
#include <stdio.h>
#include <string.h>
#define ARR "It's a perfect day\n"
char * string_in(char *, int);
int main(void)
{
char * ptr = ARR, ans;
size_t size = strlen(ARR);
printf("%d\n", size);
do
{
puts(ptr);
ans = string_in(ARR, size);
puts(ptr);
}while(getchar() == '\n');
return 0;
}
char * string_in(char * tar, int n)
{
char temp;
int index = n - 1;
for(int i = 0; i < n; i++)
{
temp = *(tar+i);
tar[i] = tar[index];
tar[index] = temp;
index--;
}
return tar;
}
答案 0 :(得分:4)
你的第二个循环应该只到(n / 2)
for(int i = 0; i < (n/2); i++)
答案 1 :(得分:2)
您必须因此而遇到分段错误:
#define ARR "It's a perfect day\n"
当你在下面做的时候:
char * ptr = ARR;
这将被编译器替换为:
char * ptr = "It's a perfect day\n";
以上sting是不可变的,你无法修改。因此,分段错误。
是的,请更正您的反向字符串功能。并将ARR声明为char ARR[length]
,并在数组中使用length
所需数量的字符。
答案 2 :(得分:0)
按以下方式编写功能
char * reverse( char * s, size_t n )
{
for( size_t i = 0; i < n / 2; i++ )
{
char tmp = s[i];
s[i] = s[n - i - 1];
s[n - i - 1] = tmp;
}
return s;
}
至于你的功能,当i&lt; n / 2,然后第二次将其反转到原始状态。