C语言字符数组排逆序问题

#include <stdio.h> void main() { char str[10],t; int i=9,j=0; gets(str); for(;i>j;i--,j--) { t=str[j]; str[j]=str[i]; str[i]=t; } puts(str); } 这段程序运行为何会说文件不可写,怎么修改?(只用字符数组可以做到吗?)

第1个回答  2020-04-24
首先来分析下你的代码
第一处错误for(;i>j;i--,j--),在这里你的j是赋的初值是0,再--,这不是你想要的吧,细心点。
第二处错误,我们知道用字符数组接收字符串的时候,系统会在最后自动加上空字符'\0'以标志字符串结束,当采用你的程序交换时,没有考虑空字符,会连同空字符一起与前面的字符交换,你的i是从9开始减,而你定义的字符数组是str[10],所以交换后最后一个字符肯定是你输入的第一个字符,而不是一个空字符,当你用puts()输出字符串后,就会出现错误了。
解决:在头文件加上
#include<string.h>
//调用处理字符串的函数的需要
再给i赋初值改为
int
i=strlen(str)-1
//-1原因是数组从str[0]开始的,strlen()
//作用就不用我说了吧
再把for语句中j--改成j++就OK了
也可以用指针来做的,自己试试吧,不过也大同小异
相似回答