永发信息网

字符串逆置为什么输出是乱码

答案:1  悬赏:0  手机版
解决时间 2021-05-01 06:53
  • 提问者网友:像風在裏
  • 2021-04-30 23:16
#define INITSTRLEN 100
typedef struct
{ char *ch;
int length;
int strsize;
}string;
void initstring(string *s)
{ s->ch=(char *)malloc(INITSTRLEN*sizeof(char));
s->length=0;
s->strsize=INITSTRLEN;
}
turn(string *s)
{ char temp;static int i=0;
if(i<s->length/2)
{ temp=s->ch[i];
s->ch[i]=s->ch[s->length-1-i];
s->ch[s->length-i-1]=temp;
i++;
}
return (s->ch[i]);
}
void list(string s)
{ int i;
for(i=0;i<s.length;i++)
printf("%c",s.ch[i]);
printf("\n");
}
main()
{ string s;
initstring(&s);
printf("please input the string s:\n");
scanf("%s",&s);
list(s);
turn(&s);
getch();
}
为什么输出的是乱码,而且还是东一个西一个的?是哪里出现了逻辑错啊?
最佳答案
  • 五星知识达人网友:行雁书
  • 2021-04-30 23:31
这个代码有点混乱,如果只是要实现字符串逆置,用不了那么多代码的,而且你直接scanf到string结构里,这样做不仅没有成功输入,还有可能污染内存,应该scanf到s.ch里,姑且改成这样,能实现你要的逆序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define INITSTRLEN 100
typedef struct
{
char *ch;
int length;
int strsize;
}string;

void initstring(string *s)
{
s->ch=(char *)malloc(INITSTRLEN*sizeof(char));
s->length=0;
s->strsize=INITSTRLEN;
}

void turn(string *s)
{
char temp;
int i=0;
int j = strlen(s->ch)-1;
while(i<j) {
temp = s->ch[i];
s->ch[i] = s->ch[j];
s->ch[j] = temp;
++i, --j;
}
}

void list(string* s)
{
printf("%s",s->ch);
printf("\n");
}

int main()
{
string s;
initstring(&s);
printf("please input the string s:\n");
scanf("%s",s.ch);
turn(&s);
list(&s);
return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯