字符串的输入scanf 和gets

#include<stdio.h>

#include<string.h>

#define N 100

int main(int argc, const char *argv[])

{

char str1[N];

char str2[N];

①scanf("%s",str1);

②gets(str1);

printf("%s\n",str1);

return 0;

}

①这种情况如果是打印Hello World这种中间位置有空格的字符串会出现只打印Hello的情况,

因为scanf函数中,只有%c才能打印空格这样的字符,而%s是不认识空格这样的字符型常量

②gets()这个函数就没有以上的顾虑,但是不建议使用这样的输入方法,#define N 100这里

定义的是字符串能够占用的内存,gets()是将输入的字符串全部输入,这样就会造成如果输

入的字符串的长度大于定义的内存就会占用非法的内存空间

[email protected]:~/cwx$ ./zifuchuan1

i am student!!! i come from yancheng

i am student!!! i come from yancheng

*** stack smashing detected ***: ./zifuchuan1 terminated

(stack smashing detected是分配的空间不足的提示)

另外还有一个注意点就是scanf("%s",str1)与之前输入的方式不同的是字符串在输入的时候是不

需要加上&这样的取地址符,因为str1作为字符串名其实就是地址常量

时间: 2024-10-28 12:56:38

字符串的输入scanf 和gets的相关文章

字符串的输入问题

字符串的输入问题: 1.    格式化输入函数:scanf("格式字符串", 地址);.将用户输入的数据与格式化字符串进行匹配, 将匹配到的数据赋值给地址所在的内存,使用 %s 作为字符串的格式,需要注意的是,当输入的字符超过数组长度时就会覆盖掉与该数组所占内存相邻的内存中的其他数据.而且有时系统不会报错.假如定义一个长度为5的char 型字符串数组,当输入12345abc时如下图模拟内存空间: 2.    其他输入字符串函数介绍: (1).    gets(数组名或者&变量名

【C】字符串的输入,求输入字符串中最长的单词

首先,基本目标很简单,就是利用C语言:编写一个函数,输入一行字符,将此行字符中的最长的单词输出. 代码如下: #include<stdio.h> void input(char s[]){ int i=0; for(int c;(c=getchar())!='\n';i++){ s[i]=c; } s[i]='\0';//读取完成,记得对这个字符数组封口 } char* findmax(char s[]){ int max=0,word_length=0,p=0,i=0;//这个p是用来记录最

C语言的字符串转为OC中的字符串,控制台输入用户名和密码,判断输入的用户名是否是@“Frank”, 密码 是否是 @“lanou”, 如果用户名和密码都正确,则输出登录成功, 否则输出登录失败.

char name[20] = "";存储用户名 char code[20] = "";存储密码 printf("请输入用户名与密码"); scanf("%s%s", name, code); NSString *str1 = [NSString stringWithFormat:@"%s", name ]; NSString *str2 =[NSString stringWithFormat:@"

C++字符串的输入问题

#include <IOSTREAM> #include <MALLOC.H> using namespace std; /*字符串的输入:使用字符串输入的专属函数gets().cin.get(): gets()同cin.scanf一样,无法检测数组下标越界的问题,这会导致程序运行时崩溃. cin.get()可以指定录入的个数,从而避免了下标越界带来的问题.*/ void main() { const int n = 100; char str[n] = {0}; puts(&qu

给一个固定的字符串,输入另一个字符串和它比较,直到猜对为止

本以为很简单,其实简单中也能学到很多细节的问题,下面附上自己的程序,自己学到的细节或者觉得要注意的点在注释中有说明 /* 给一个固定的字符串,输入另一个字符串和它比较(要求只要字母对应上就可以,不用大小写一模一样),直到猜对为止 */ /* 思路:将字符串全变为大写字母构成的字符串,再循环比较 */ #include <stdio.h> #include <string.h> #include <ctype.h> #define MAX 40 void ToUpper(

c++字符串的输入的思考

字符串的输入,是学习c++的一个重点,也是一个极富有细节意味的知识点,如果你不了解这些细节,你可能会在写程序时犯错而一脸懵逼不知所措. 与此同时,我们要了解c++缓冲区的概念,程序的输入都建有一个缓冲区.输入的过程大概是这样的,一次输入结束,键盘会向缓冲区存入数据,而相应的读取函数会从缓冲区读取,我们来用具体的代码来演示一下缓冲区具体怎么工作: 仔细看上述代码,我的代码里定义了四个char类型的字符串,并且有cin输入,但是当我们输入一个具有空格的字符串时,直接输出了而忽略了人为的继续输入,原因

[PTA]7-1 找最小的字符串 针对输入的N个字符串,输出其中最小的字符串(c++)

7-1 找最小的字符串 本题要求编写程序,针对输入的N个字符串,输出其中最小的字符串. 输入格式: 输入第一行给出正整数N:随后N行,每行给出一个长度小于80的非空字符串,其中不会出现换行符,空格,制表符. 输出格式: 在一行中用以下格式输出最小的字符串: Min is: 最小字符串 输入样例: 5 Li Wang Zha Jin Xian 输出样例: Min is: Jin 解答: 1 #include <iostream> 2 #include<string> 3 using

[原创]C++带空格字符串的输入问题

字符串一直是一个重点加难点,很多笔试面试都会涉及,带空格的字符串更是十分常见,现在对字符串的输入问题进行一下总结. C++用cin输入的时候会忽略空格以后的字符,比如 char a[100]; cin>>a; C++用cin输入的时候会忽略空格以后的字符,输入"hello world"输出的是"hello": 如果用循环输入 for(int i=0;i<100;i++) { cin>>a[i]; } 这样输入100个数吗?或者定义一个n

&lt;CPP学习 第二天&gt; 字符串的输入 及 String类

今天简单的学习了字符串的输入以及C++的String类. 1.面向行的输入: getline(); getline()函数读取整行,通过回车键输入的换行符来确定输入结尾.要调用这种方法,可以使用cin.getline().此函数有两个参数,第一个参数是用来存储的数组名称,第二个参数是要读取的字符数,getline()读取完一行将丢弃换行符. get(); get()函数有几种变体,其中一种变体的工作方式与getline()类似,接受的参数相同,解释参数的方式也相同,并且都读取到行尾,但是get(