C语言 字符串反序问题 为什么打印出来会出现两个乱码

如题所述

因为你的temp中是没有加入结束符'\0'所以它会一直往下读,所以会出现乱码。


但在大多数编译器中你的程序中函数fanzi返回的内存在函数返回后已经被系统回收了,原来的字符串就已经不存在了,所以建议您直接对原字符串进行操作。


具体代码如下:

#include <stdio.h>
#include <string.h>
void fanzhi(char str[]);
main()
{
    char str[100];
    printf("input a string\n");
    gets(str);
    fanzhi(str);
    puts(str);
}
void fanzhi(char str[])
{
    int n,i;
    char temp[100],*p;
    n = strlen(str);
    for(i = 0; i< n;i++)
    {
        temp[i]=str[n-1-i];
    }
    for(i=0;i<n;i++)
    {
        str[i]=temp[i];
    }
}

追问

怎么加? 能给个答案吗?

追答

就是temp[n]='\0';

循环后加上

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-01-05
你的程序中返回的内存在函数返回后,已经被系统回收了。
应该这样写:
char *fanzhi(char str[])
{char t,*p,*q;
for(p=q=str;*p;p++);
for(p--;p>q;p--,q++)
{t=*p;*p=*q;*q=t;}
return str;
}
第2个回答  2017-01-05

您好,很高兴能回答您的问题。


        把for (i=0;i<n;i++)改成for (i = 1; i <= n; i++)试试?好像是末尾的0有问题。


希望我的回答对您会有帮助,望采纳!

相似回答
大家正在搜