心鲜旅人 发表于 2021-7-28 11:23:05

字符串问题

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

int main()
{
        int i = 0;
        char str1;
        char str2;
       
        printf("请输入一行文本:");
        while((str1 = getchar()) != '\n')
        ;
       
        if(strlen(str1) > 20)
        {
                str1 = '\0';
                strncpy(str2,str1,20);
        }
        else
        {
                str1 = '\0';
                strcpy(str2,str1);
        }
       
        printf("你输入的文本是:%s",str2);
       
        return 0;
}
然后我发现没法实现要求2,可是在我调试的时候,我发现我的字符串结尾不能是空格,一旦是空格就会出现乱码,这是为什么呢,求大佬解答{:10_254:}

人造人 发表于 2021-7-28 13:06:02

strncpy 没有自动加上终止符的,需要手动加上不然会出问题的。
https://www.runoob.com/cprogramming/c-function-strncpy.html

理想小青年 发表于 2021-7-28 14:03:09

本帖最后由 理想小青年 于 2021-7-28 14:04 编辑

楼上大佬意思表达,字符串需要加'\0',以0结尾;

心鲜旅人 发表于 2021-7-28 14:53:35

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

我16行有啊,而且我发现如果超过20个字符是,会打印两遍,这是为什么呢

人造人 发表于 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;
    char str2;

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

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

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

    return 0;
}
页: [1]
查看完整版本: 字符串问题