2 qq 37262350 qq_37262350 于 2017.01.12 18:43 提问

求大神看看这个程序存字符串的时候问题出在哪里?

#include

#include

#define SENTENCE_SIZE 100

int main (void)

{

char sentence[SENTENCE_SIZE];
char ch;

int i=0;

printf("Enter a message: ");

while((ch=getchar())!='\n')
{
sentence[i++]=ch;
if(i==SENTENCE_SIZE)
break;
};
printf("Reversal is: ");

for(i=strlen(sentence);i>0;i--)

putchar(sentence[i]);

return 0;

} 我调试发现它会自动在我输入的内容后面加一个w,输出就会出错,请问是为什么?

5个回答

YXTS122
YXTS122   2017.01.12 20:16
已采纳

在while(){}的后面加一句sentence[i]='\0';就可以了。。。。。。

LD0807
LD0807   2017.01.12 19:03

0-100,应该是你下标的问题吧。数组下标检查一下,逻辑对不对

bdmh
bdmh   Ds   Rxr 2017.01.12 19:58

感觉i的值应该从长度减一开始,零结束

YXTS122
YXTS122 回复bdmh:他是采用putchar,长度要不要从减一开始无所谓的。
11 个月之前 回复
YXTS122
YXTS122 回复bdmh:他是采用purchar,长度要不要从减一开始无所谓的。
11 个月之前 回复
qq_34031956
qq_34031956   2017.01.12 20:10

假设你一共输入了5个字母,strlen(sentence)不包括结尾的空字符,返回值就是5,也就是i被赋值为5,接下来你访问的sentence[i] 其实是数组的第6个字符。从这里就出错了。

YXTS122
YXTS122   2017.01.12 20:20

#include<stdio.h>
#include<string.h>
#define SENTENCE_SIZE 100
int main()
{
char sentence[SENTENCE_SIZE];
char ch;
int i=0;
printf("Enter a message:");
while ((ch=getchar())!='\n')
{
sentence[i++]=ch;
if (i==SENTENCE_SIZE)
break;
}
sentence[i]='\0';
printf("Reversal is:");
for (i=strlen(sentence);i>=0;i--)
putchar (sentence[i]);
return 0;
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!