我编写了以下函数来反转字符串s
char *strinverse( const char *s ){
char *t;
int i = 0;
while (*s) {
s++;
i++;
}
while (i >= 0){
s--;
*t = *s;
t++;
i--;
}
*t = '\0';
return t;
}
int main(void){
char v[4]="abc";
char r[4];
char *pr = r;
pr = strinverse(v);
printf("%s", pr);
return 0;
}
想法是找出第一个while循环中字符串s
的长度,然后在将相应值复制到s
时减少t
的指针。由于某种原因,程序崩溃,编译器没有给我任何信息。也许主要功能有问题?谢谢你的建议!
答案 0 :(得分:1)
回答编辑
#include<stdio.h>
#include<stdlib.h>
char *strinverse(const char *s ){
char *t, *p;
int i = 0;
while (*s) {
s++;
i++;
}
t = (char*)malloc((i + 1) * sizeof(char)); //added this!
p = t;
while (i >= 0){
s--;
*t = *s;
t++;
i--;
}
*t = '\0';
return p;
}
int main(void){
char v[4]="abc";
char *pr;
pr = strinverse(v);
printf("%s\n", pr);
return 0;
}
答案 1 :(得分:1)
程序崩溃的原因是您没有为指针t
分配空间。在这种情况下,您的程序会调用未定义的行为。为t
t = malloc(i + 1);
最后不要忘记使用free(t)
释放内存。
答案 2 :(得分:1)
我会使用一个在原地更改字符串的函数。
void reversestr(char *s)
{
char tmp;
size_t i, len = strlen(s);
for (i = 0; i < len / 2; i++) {
tmp = s[i];
s[i] = s[len - 1 - i];
s[len - 1 - i] = tmp;
}
s[len] = '\0';
}
如果您需要单独使用反向字符串,则可以在致电strdup
之前使用reversestr
。 BTW:以&#34; str&#34;开头的函数名称保留用于C标准库的功能。
答案 3 :(得分:0)
你没有在指针“t”中创建malloc,你在这一行中遇到问题“* t = * s;”