C语言字符串数组输入输出的一些小发现

本文探讨了C语言中字符串操作的一些常见陷阱,包括字符数组的初始化与赋值,以及`scanf()`和`printf()`函数在处理字符串时的行为。通过示例代码展示了如何在`scanf()`中正确读取字符串,以及`printf()`输出指针和数组的区别。还提到了从字符数组中间开始接收输入的特殊情况,并分析了`scanf()`自动添加的结束符。
摘要由CSDN通过智能技术生成

  • 一直都知道的是字符串(字符数组)只有声明的时候可以赋值,类似这样:
char c[20]="something";
  • 之后如果想要输入数据到这个数组中的话需要单个输入,也就是说下面这样是错误的做法:
char c[20];
c="anything";
  • 不过类似动态数组的操作是可行的,有些编译器会报错
char *c;
c="anything";

比如vscode:
在这里插入图片描述
这样修改一下就行了

char *c;
c=(char*)"anything";
  • 但是这并不是今天我想说的
    在这里插入图片描述


  • 声明并且初始化以后还可以接收一串输出,
#include <stdio.h>  
#include <string.h>
  
int main() {  
    freopen("file out.txt","r",stdin);
    char c[20]="something";
    // char *c;
    // c=(char*)"anything";
    scanf("%s",c);
    
    printf("%s\n",c); 

    return 0;  
}

输出:

beautiful
  • scanf()函数会自动在后面加上结束符
    在这里插入图片描述
    这个不明显,我们看下面一个例子
    注意:下面这个声明方式使用scanf会报错
char *c;
c=(char*)"anything";
scanf("%s",c);
  • 更神奇的现象,从中间接收输入
    比如我们在c[2]处开始接收,我们输入nice
#include <stdio.h>  
#include <string.h>
  
int main() {  
    freopen("file out.txt","r",stdin);
    char c[20]="something";
    
    scanf("%s",&c[2]);
    
    printf("%s\n",c); 

    return 0;  
}

输入

nice

输出

sonice

完全就是从这里就开始了啊!
另外再来看看scanf自动给我们添加的结束符

输入之前
在这里插入图片描述
输入之后
在这里插入图片描述

  • 好了就是这样了
    在这里插入图片描述

2022.5.23
今天在使用printf输出字符数组的时候因为一个小问题debug了半天

#include <bits/stdc++.h>
using namespace std;

int main()
{
    //计算机图形学
    freopen("file.txt", "r", stdin);
    char *str = new char[10];
    // char str[10];
    scanf("%s", str);
    
    printf("%s\n", str);//print correctly
    printf("%s\n", *str);//error

    return 0;
}

心里面一直觉得str是一个指针,然后在输出的时候就使用了第二种方法,在前面加了一个*号,哭~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值