概述
字符串输入输出:
char str[8];
scanf("%s",&str);
printf("%s",str);
scanf表示读入一个单词(到空格、tab、回车为止)
scanf是不安全的,因为这样不知道要读入的内容的长度,在一些情况中会出现问题:
#include<stdio.h>
void f(){
char s1[8];
char s2[8];
scanf("%s",&s1);
scanf("%s",&s2);
printf("s1 = %sns2 = %s",s1,s2);
}
int main(){
f();
return 0;
}
理论上,输入超过8的字符串会报错
(翁恺的视频中会报错,但我自己用dev-c++就不会出现这类问题……)
安全的方法:
建议对字符串输入时,限制其输入长度,如:
scanf("%6s",&s1);
限制我输入的字符串输入长度最长为6,如果有结束标志(TAB、空格、回车)同样会直接结束,结果会为:
1234567654 345
s1 = 123456
s2 = 7654
12345 234565432
s1 = 12345
s2 = 234565432
空字符串:
char buffer[100] = "";
这是一个空字符串,此时buffer[0] == ‘ ’
char buffer[] = "";
如此定义的话,buffer的长度是1,不能起到创建一个空字符串的作用
字符串数组:
可能会有两种猜想字符串数组的定义:
char **a;
a是一个指针,指向另一个指针,这个(另一个指针)指向一个字符(串),所以这并不是想要的字符串数组
char a[][];
这是一个二维数组,讲道理应该是字符串数组的样子,但实际上它对长度非常有限制:
#include<stdio.h>
void f(){
char a[][] = {
"Hello",
"hahah"
};
}
int main(){
f();
return 0;
}
首先,会报错,因为列必须要有一个确定的数字
char a[][] 改成char a[][10]后,成功执行,但是这时候我们定义的行长度为固定的,就像是const char a[] = “Hello”,固定为6(有一个 ),所以如果将这里面的元素改成
char a[][] = {
"Hello",
"hahahaha"
};
系统会报错
(翁恺的编译器会出问题,我用的并不会……但出于安全考虑,不建议这样定义字符串数组)
在此提供一个正确的写法:
char *a[];
此时将其替换后便是最安全的字符串数组定义方法
char a[][10] 和 char *a[]的区别:
char a[][10]是开辟了一个n行10列的矩阵,然后每行存有数据,如下图:
char *a[]可以理解为指针数组,a[0]指向一个字符串(如“hello ”),a[1]指向另一个字符串(如“li ”),如下图:
因此这两个是不等值的,出于安全考虑,建议使用后者
程序参数
默认的main函数是
int main(int argc,char const *argv[])
argc是指后面数组的大小(size)
argv[0]是命令本身,当使用unix的符号链接时,会反映符号链接的名字
对于这个字符串,可以通过代码呈现出来:
#include<stdio.h>
int main(int argc, char const *argv[]){
int i;
for(i = 0;i<argc;i++){
printf("%d:%sn",i,argv[i]);
}
return 0;
}
后续内容建议看视频,需要linux系统,windows不好实现
翁恺 程序设计入门 程序参数
最后
以上就是殷勤丝袜为你收集整理的C语言程序设计 学习笔记 字符串(II)(字符串输入输出,字符串数组,程序参数)的全部内容,希望文章能够帮你解决C语言程序设计 学习笔记 字符串(II)(字符串输入输出,字符串数组,程序参数)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复