为什么我令j=strlen(c)时就没有输出,令j=strlen(c)-1是就有输出呢,j=strlen-1不是字符数减一了吗?

如题所述

这个涉及到几个问题,你首先要知道c语言中数组的最低下标是0,也就是数组中有5个元素下标分别是0~4

第二个问题是c风格字符串,就是你用scanf输入进去的,c风格字符串标志字符串结尾的是一个全0的字符,就是二进制位全0的一个字符,如果用c语言编程可以写作'\0',注意和'0'区别

这样问题就好解决了,你的程序似乎是将字符串头尾颠倒,也就是0和4的位置颠倒,1和3的位置颠倒对吧,但是j=strlen()的话,取出的j是字符串的长度,例如是5,但是字符串的最大下标是4,如果不-1的话就会出错,就会将第二个问题所说的c风格字符串结尾覆盖导致问题,具体问题是把c风格字符串的结尾全0字符交换到了下标为0的位置,也就说这个字符串变成空的了(因为结束标志到了最开始,也就是最开始就结束了,不就相当于字符串空了吗)追问

但是我删除了return 0;后就有输出了,这是为什么呢?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-25
首先输出都是有的。
第一个程序输出长度6,但是程序把c[6]与c[0]交换了,而c[6]刚好是'\0'。所以下面不会输出逆序的字符串。因为第一个就是'\0',所以你看不到输出。
第二个程序逻辑正确,c[0]应该与c[5]交换。追问

我懂了,但我想问一个问题,为什么我一开始时按ctrl+z没有输出,后来删除了主函数中的return 0;反而有输出了?

追答

不是很明白您的意思,输入Ctrl+Z应该程序就结束了,这与return 0没有关系吧。

追问

一开始时输出框没有显示任何东西,我把return 0;删除后再编译执行就有输出了,我想知道为什么会这样?

追答

不会啊,我在Codeblocks编译执行都是可以的,与return 0无关。
其实不需要纠结这种问题,关注问题的核心就可以了。

本回答被提问者采纳
第2个回答  2012-10-25
# include <stdio.h>
# include <string.h>
void inves(char c[])
{
int i,j;
char t;
j=strlen(c);
for(i=0;i<j/2;i++)
{
t=c[i];
c[i]=c[j-1-i];
c[j-1-i]=t;
}
/*j=strlen(c);
for(i=0;i<j;i++)
{
printf("%c",c[i]);
}
printf("\n");*/
}

void main()
{
char c[100];
printf("请输入字符串:\n");
while(scanf("%s",c)!=EOF)
{
inves(c);
printf("%s\n",c);
}
}

请输入字符串:
wo shi hehe from UESTC
ow
ihs
eheh
morf
CTSEU本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网