鱼C论坛

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

[已解决]字符串问题

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

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

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

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

int main()
{
        int i = 0;
        char str1[100];
        char str2[21];
        
        printf("请输入一行文本:");
        while((str1[i++] = getchar()) != '\n')
        ;
        
        if(strlen(str1) > 20)
        {
                str1[20] = '\0';
                strncpy(str2,str1,20);
        }
        else
        {
                str1[i] = '\0';
                strcpy(str2,str1);
        }
        
        printf("你输入的文本是:%s",str2);
        
        return 0;
}
然后我发现没法实现要求2,可是在我调试的时候,我发现我的字符串结尾不能是空格,一旦是空格就会出现乱码,这是为什么呢,求大佬解答
最佳答案
2021-7-28 13:06:02
strncpy 没有自动加上终止符的,需要手动加上不然会出问题的。
https://www.runoob.com/cprogramming/c-function-strncpy.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

楼上大佬意思表达,字符串需要加'\0',以0结尾;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我16行有啊,而且我发现如果超过20个字符是,会打印两遍,这是为什么呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

int main()
{
    int i = 0;
    char str1[100];
    char str2[21];

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

    if(strlen(str1) > 20)
    {
        //str1[20] = '\0';
        str2[20] = '\0';
        strncpy(str2,str1,20);
    }
    else
    {
        str1[i] = '\0';
        strcpy(str2,str1);
    }

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

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 20:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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