我正在学习C,我正在尝试使用指针来反转字符串.(我知道你可以使用一个数组;这更多的是关于学习指针.)
尝试运行下面的代码时,我不断遇到分段错误.海湾合作委员会似乎不喜欢这*end = *begin;条线.这是为什么?
特别是因为我的代码几乎与另一个问题中讨论的非邪恶C函数相同
#include <stdio.h>
#include <string.h>
void my_strrev(char* begin){
char temp;
char* end;
end = begin + strlen(begin) - 1;
while(end>begin){
temp = *end;
*end = *begin;
*begin = temp;
end--;
begin++;
}
}
main(){
char *string = "foobar";
my_strrev(string);
printf("%s", string);
}
Run Code Online (Sandbox Code Playgroud) 在最近的一次采访中,我被问到一个非常简单的问题,即在没有任何额外变量和任何内置函数的情况下反转字符串(不仅仅是打印).我能想到的最接近的是:
#include<stdio.h>
#include<string.h>
int main()
{
char ch[100];
scanf("%s",&ch);
int i=0;
while(i<strlen(ch)/2)
{
ch[i]=ch[strlen(ch)-1-i]+ch[i];
ch[strlen(ch)-1-i]=ch[i]-ch[strlen(ch)-1-i];
ch[i]=ch[i]-ch[strlen(ch)-1-i];
i++;
}
printf("%s",ch);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我使用变量时拒绝了我的解决方案i.如果不使用计数器变量,这怎么可能呢?有没有其他方法可以解决这个问题?
编辑
这些是确切的问题(无论或多或少):
在C中不使用任何变量或内置函数来反转字符串.