#include <stdio.h>
#include <stdlib.h>
int main()
{
char *s[]={"To err is human...","But to really mess things up...","One needs to know C!!"};
int i,j,len,t;
for(i=0;i<=2;i++)
{
len=strlen(s[i]);
for(j=0;j<len/2;j++)
{
t=*(s[i]+len-1-j);
*(s[i]+len-1-j)=*(s[i]+j);
*(s[i]+j)=t;
}
}
for(i=0;i<=2;i++)
printf("%s\n",s[i]);
return 0;
}
上面的程序有什么错误。我只是交换每个字符串两端的值。
最佳答案
除此之外,
char *s[]={"人都会犯错...","但是真正把事情搞砸...","一个人需要了解 C!!"};
在这里声明并初始化一个指向 char 的指针数组。这样每个指针都指向给定的字符串文字。因此,无论您在 for
循环中执行什么操作来反转或更改这些字符串,都将导致未定义的行为(在这种情况下,UB 通常是段错误/崩溃)。
至少将其更改为 char s[][100] = {"人都会犯错...","但是要真正把事情搞砸...","一个人需要了解 C!! “};
关于c - 反转字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38742558/