鱼C论坛

 找回密码
 立即注册
查看: 852|回复: 4

[已解决]字符串问题

[复制链接]
发表于 2021-7-28 11:23:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目是这样的:
1. 按下边要求写程序
要求 A:定义一个长度为 21 的字符数组,用于存放用户输入的文本;
要求 B:如果用户输入的文本长度超过 20 个字符,且文本中存在空格,则截取至最接近末尾(第 20 个字符串)的空格;
要求 C:如果用户输入的文本长度超过 20 个字符,且文本中不存在空格,则打印前 20 个字符。
我的代码是这样的:
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.         int i = 0;
  6.         char str1[100];
  7.         char str2[21];
  8.        
  9.         printf("请输入一行文本:");
  10.         while((str1[i++] = getchar()) != '\n')
  11.         ;
  12.        
  13.         if(strlen(str1) > 20)
  14.         {
  15.                 str1[20] = '\0';
  16.                 strncpy(str2,str1,20);
  17.         }
  18.         else
  19.         {
  20.                 str1[i] = '\0';
  21.                 strcpy(str2,str1);
  22.         }
  23.        
  24.         printf("你输入的文本是:%s",str2);
  25.        
  26.         return 0;
  27. }
复制代码

然后我发现没法实现要求2,可是在我调试的时候,我发现我的字符串结尾不能是空格,一旦是空格就会出现乱码,这是为什么呢,求大佬解答
最佳答案
2021-7-28 13:06:02
strncpy 没有自动加上终止符的,需要手动加上不然会出问题的。
https://www.runoob.com/cprogramming/c-function-strncpy.html
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-7-28 13:06:02 | 显示全部楼层    本楼为最佳答案   
strncpy 没有自动加上终止符的,需要手动加上不然会出问题的。
https://www.runoob.com/cprogramming/c-function-strncpy.html
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-28 14:03:09 | 显示全部楼层
本帖最后由 理想小青年 于 2021-7-28 14:04 编辑

楼上大佬意思表达,字符串需要加'\0',以0结尾;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-28 14:53:35 | 显示全部楼层
理想小青年 发表于 2021-7-28 14:03
楼上大佬意思表达,字符串需要加'\0',以0结尾;

我16行有啊,而且我发现如果超过20个字符是,会打印两遍,这是为什么呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-28 15:02:23 | 显示全部楼层
心鲜旅人 发表于 2021-7-28 14:53
我16行有啊,而且我发现如果超过20个字符是,会打印两遍,这是为什么呢
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.     int i = 0;
  6.     char str1[100];
  7.     char str2[21];

  8.     printf("请输入一行文本:");
  9.     while((str1[i++] = getchar()) != '\n')
  10.         ;

  11.     if(strlen(str1) > 20)
  12.     {
  13.         //str1[20] = '\0';
  14.         str2[20] = '\0';
  15.         strncpy(str2,str1,20);
  16.     }
  17.     else
  18.     {
  19.         str1[i] = '\0';
  20.         strcpy(str2,str1);
  21.     }

  22.     printf("你输入的文本是:%s",str2);

  23.     return 0;
  24. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-27 04:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表