row1990 发表于 2017-4-11 16:52:09

关于C语言字符串数组的问题。




如图,space记录了最后一个空格的位置,然后下面又把'\0'赋给str ,这样,空格位置不是应该被结束符替换了吗?可我编译的结果空格却还存在?是我理解有误还是怎么回事?求大神指正~~

人造人 发表于 2017-4-11 17:18:30

我不建议你把代码写成那样
我写了一个
如果你执意要找你代码中的问题,把代码贴上来

#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
请按任意键继续. . .

winnerccie 发表于 2017-4-11 17:24:55

学习一下{:5_101:}{:5_101:}

row1990 发表于 2017-4-11 17:39:13

人造人 发表于 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 个字符。

人造人 发表于 2017-4-11 17:49:18

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;
}

lumber2388779 发表于 2017-4-11 19:47:01

最后加多一个'\0'是为了让内存识别到字符串已经结束,并不是空格,真正的空格是'\32',你对照一下ASCII码表就能看出来,字符串在内存中都会比实际长度多一个字节用于作为结束符,你学到后边用malloc动态分配内存空间你就要注意这点,不然会报内存越界的错误

row1990 发表于 2017-4-12 12:31:30

lumber2388779 发表于 2017-4-11 19:47
最后加多一个'\0'是为了让内存识别到字符串已经结束,并不是空格,真正的空格是'\32',你对照一下ASCII码表 ...

多谢提醒,这个我知道的。我就是搞不懂上面已经把‘\0’赋给空格的位置了,编译出来却多出一个空格。

这几天比较忙,还没时间编译看看是什么情况……

聆云 发表于 2017-4-12 13:12:23

代码没问题,你也没理解错误!关键在于控制台输出格式的问题!应为你是中文系统

row1990 发表于 2017-4-12 15:09:39

聆云 发表于 2017-4-12 13:12
代码没问题,你也没理解错误!关键在于控制台输出格式的问题!应为你是中文系统

我用的是虚拟机linux英文系统~~{:10_266:}

row1990 发表于 2017-4-12 15:13:27

聆云 发表于 2017-4-12 13:12
代码没问题,你也没理解错误!关键在于控制台输出格式的问题!应为你是中文系统

没理解错误就行,我以为str原先存储的不是空格而'\0'没有赋值给空格的位置呢,是就好,毕竟还不是很熟练。
有空再编译看看具体啥情况……
页: [1]
查看完整版本: 关于C语言字符串数组的问题。