我是靠谱客的博主 殷勤丝袜,最近开发中收集的这篇文章主要介绍C语言程序设计 学习笔记 字符串(II)(字符串输入输出,字符串数组,程序参数),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

字符串输入输出:

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)(字符串输入输出,字符串数组,程序参数)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部