Linux C 学习第十二天

一、字符串处理函数
1.gets函数不检查预留缓冲区是否能够容纳用户实际输入的数据。多出来的字符会导致内存溢出,fgets函数改进了这个问题。
由于fgets函数是为读取文件设计的,所以读取键盘时没有gets那么方便

char s[10] = {0};
// 第一个参数是char的数组,第二个参数是数组的大小,单位:字节,
// 第三个参数stdin代表标准输入的意思
// fgets是安全的,不存在缓冲区溢出的问题,只要保证第二个参数小于等于数组实际的大小,就能避免缓冲区溢出问题
// fgets会将回车键读到数组里
fgets(s, sizeof(s)/sizeof(char), stdin);

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

2.puts函数打印字符串,与printf不同,puts会在最后自动添加一个’\n’
char s[] = “hello world”;
puts(s);
3.strcat、strncat
size_t strcat(char * _Str1, const char * _Str2);
将参数_Str2追加到_Str1后尾
char s[1024] = “hello world”;
int len = strlen(s);//得到字符串长度,返回一个字符串中有效字符的数量(不包含字符串结尾的0)
printf(“len = %d\n”, len);
char s1[100] = “abc123456789”;
strcat(s, s1);//将两个字符串合并,结果放入第一个参数里面,strcat也存在缓冲区溢出的问题
printf("%s\n", s);
size_t strncat(char * _Str1, const char * _Str2, size_t len);

4.int strcmp(const char * _Str1, const char * _Str2);
比较两个字符串是否相等,相等返回0,不等返回非0
若str1>str2 返回值大于0;
若str1 5.char *strcpy(char * _Str1, const char * _Str2);

将参数_Str2拷贝到参数_Str1中

6.sprintf
格式化字符串

int a=10;
int b=10;
char str[100]={0};
sprintf(str,"a=%d,b=%d\n",a,b);
//把后面的内容导入到str数组中

7.sscanf类似于scanf函数,,scanf从键盘读取用户输入,scanf从指定格式化字符串读取输入
char str[]=“a=10,b=20”;
sscanf(str,“a = %d,=%d”,&a,&b);
8.命令行参数
int main(int argc,int **argv)
第一个参数:命令行参数个数
第二个参数:命令行各个参数的值,类型是字符指针数组
char *buf[]={“xx”,“xxx”,“adsa”};
小练习:命令行计算器

int main(int argc,char* argv[])
{
	if(argc != 4)
	{
		printf("usage:%s num1 ope num2\n",argv[0]);
	}
	int num1 = atoi(argv[1]);
	int num2 = atoi(argv[3]);
	int res;
	switch(argv[2][0])
	{
		case '+':
			res = num1 + num2;
			break;
		case '-':
			res = num1 - num2;
			break;
		case '*':
			res = num1 * num2;
			break;
		case '/':
			res = num1 / num2;
			break;
		case '%':
			res = num1 % num2;
			break;
		default:
			printf("参数有误\n");
			return;
	}
	printf("%d %c %d = %d\n",num1,argv[2][0],num2,res);
	return 0;
}

你可能感兴趣的:(学习C)