关于C语言字符串数组的问题。
如图,space记录了最后一个空格的位置,然后下面又把'\0'赋给str ,这样,空格位置不是应该被结束符替换了吗?可我编译的结果空格却还存在?是我理解有误还是怎么回事?求大神指正~~ 我不建议你把代码写成那样
我写了一个
如果你执意要找你代码中的问题,把代码贴上来
#include <stdio.h>
#define MAX 21
int main(void)
{
char str;
int str_i = 0;
int ch;
printf("请输入一行文本:");
while((ch = getchar()) != '\n')
{
str = ch;
}
str = '\0';
printf("你输入的文本是:%s\n", str);
return 0;
}
请输入一行文本:123 456 789
你输入的文本是:123 456 789
请按任意键继续. . . 学习一下{:5_101:}{:5_101:}
人造人 发表于 2017-4-11 17:18
我不建议你把代码写成那样
我写了一个
如果你执意要找你代码中的问题,把代码贴上来
#include"stdio.h"
#include"string.h"
#define MAX 21
int main()
{
int ch, space, i = 0;
char str;
space = MAX - 1; //实际空间为20.
printf("输入字符串:");
while((ch = getchar()) != '\n')
{
str = ch;//将接受到的字符连续赋值给str.
if(i == MAX - 1)
{
break;//到了字符数组最后一位,退出循环。
}
if(ch == ' ')
{
space = i; //将最后一个空格的位置赋值给实际空间。
}
}
if(i >= MAX - 1)
{
str = '\0';
}
else
{
str = '\0';
}
printf("你输入的是:%s\n",str);
return 0;
}
这是小甲鱼的题目。我就是搞不懂最后那个空格怎么来的,应该是被结束符替换掉吧……
我测试的输入是:aaaaaaaaaa aaaaaaaaaa
1. 按下边要求写程序。
要求 A:定义一个长度为 21 的字符数组,用于存放用户输入的文本;
要求 B:如果用户输入的文本长度超过 20 个字符,且文本中存在空格,则截取至最接近末尾(第 20 个字符串)的空格;
要求 C:如果用户输入的文本长度超过 20 个字符,且文本中不存在空格,则打印前 20 个字符。 row1990 发表于 2017-4-11 17:39
这是小甲鱼的题目。我就是搞不懂最后那个空格怎么来的,应该是被结束符替换掉吧……
我测试的输入是: ...
#include"stdio.h"
#include"string.h"
#define MAX 21
int main()
{
int ch, space, i = 0;
char str;
space = MAX - 1; //实际空间为20.
printf("输入字符串:");
while((ch = getchar()) != '\n')
{
//str = ch;//将接受到的字符连续赋值给str.
str = ch;
if(i == MAX - 1)
{
break;//到了字符数组最后一位,退出循环。
}
if(ch == ' ')
{
space = i; //将最后一个空格的位置赋值给实际空间。
}
i++;
}
if(i >= MAX - 1)
{
str = '\0';
}
else
{
str = '\0';
}
printf("你输入的是:%s\n", str);
return 0;
} 最后加多一个'\0'是为了让内存识别到字符串已经结束,并不是空格,真正的空格是'\32',你对照一下ASCII码表就能看出来,字符串在内存中都会比实际长度多一个字节用于作为结束符,你学到后边用malloc动态分配内存空间你就要注意这点,不然会报内存越界的错误 lumber2388779 发表于 2017-4-11 19:47
最后加多一个'\0'是为了让内存识别到字符串已经结束,并不是空格,真正的空格是'\32',你对照一下ASCII码表 ...
多谢提醒,这个我知道的。我就是搞不懂上面已经把‘\0’赋给空格的位置了,编译出来却多出一个空格。
这几天比较忙,还没时间编译看看是什么情况…… 代码没问题,你也没理解错误!关键在于控制台输出格式的问题!应为你是中文系统 聆云 发表于 2017-4-12 13:12
代码没问题,你也没理解错误!关键在于控制台输出格式的问题!应为你是中文系统
我用的是虚拟机linux英文系统~~{:10_266:} 聆云 发表于 2017-4-12 13:12
代码没问题,你也没理解错误!关键在于控制台输出格式的问题!应为你是中文系统
没理解错误就行,我以为str原先存储的不是空格而'\0'没有赋值给空格的位置呢,是就好,毕竟还不是很熟练。
有空再编译看看具体啥情况……
页:
[1]