Linux基础33-C语言篇之字符串的基础操作【入门级】
字符串的基础操作
在用格式化说明符%s进行输入输出时,其输入输出项均为数组名。但在输入时,相邻两个字符串之间要用空格分隔,系统将自动在字符串最后加上\0
。在输出时,遇到结束符\0
作为输出结束标志。
对于字符串操作,我们需要使用到一些系统提供的函数(API操作)
字符串输入
scanf
语法:
scanf("%s",数组名);
注意:数组名对应的数组只能是char类型
案例:
#include <stdio.h>
int main()
{
// 创建一个数组,用来存放人的名字
char name[20];
printf("请输入您的名字:\n");
scanf("%s",name);// scanf第二个参数需要传递变量地址,如果是数组,数组名就代表数组的首地址,因为数组本身是没有空间的,其空间就是元素空间
printf("您的姓名是%s\n",name);
return 0;
}
注意:采用scanf()进行字符串输入,要求字符串中不能存在空格,否则字符串遇到空格就会结束。
fgets
语法:
fgets(数组名,数组容量,stdin);
功能:
从键盘录入一个字符串常量到字符数组,返回字符数组的地址(首地址,默认返回的地址,一般用12位16进制数表示)
说明:
采用fgets进行字符串输入,可获取所有输入的字符串,包含\n
,在实际的字符串处理时,我们可能需要处理\n
案例:
#include <stdio.h>
int main(int argc,char *argv[])
{
// 创建一个数组,用来存放人的名字
char name[20];
printf("请输入您的名字:\n");
// fgets和scanf只能二选一
fgets(name,sizeof(name)/sizeof(name[0]),stdin);
printf("您的姓名是%s\n",name);
return 0;
}
注意:
①如果输入的字符不包括空格或换行,可以使用scanf或fgets
②如果输入的字符串需要包含空格或换行,智能使用fgets
③经过对比,我们发现,在字符串输入中,fgets和scanf相比,fgets友好一些
gets(危险,谨慎使用)
语法:
gets(数组名);
功能:
从键盘录入一个字符串常量到字符数组,返回字符数组的地址(首地址,默认返回的地址,一般用12位16进制数表示)
说明:
采用gets进行字符串输入,可获取所有输入的字符串,包含\n
,在实际的字符串处理时,我们可能需要处理\n
案例:
#include <stdio.h>
int main(int argc,char *argv[])
{
// 创建一个数组,用来存放人的名字
char name[20];
printf("请输入您的名字:\n");
// fgets和scanf只能二选一
fgets(name,sizeof(name)/sizeof(name[0]),stdin);
printf("您的姓名是%s\n",name);
return 0;
}
字符串输出
printf
语法:
printf("%s",数组名);
案例:
#include <stdio.h>
int main(int argc,char *argv[])
{
// 创建一个数组,用来存放人的名字
char name[20];
printf("请输入您的名字:\n");
scanf("%s",name);// scanf第二个参数需要传递变量地址,如果是数组,数组名就代表数组的首地址,因为数组本身是没有空间的,其空间就是元素空间
printf("您的姓名是%s\n",name);
return 0;
}
fputs
语法:
fputs(const char *s,FILE *stream);
功能:
输出一个字符串
说明:
字符串可以包含转义字符
案例:
#include <stdio.h>
int main(int argc,char *argv[])
{
// 创建一个数组,用来存放人的名字
char name[20];
printf("请输入您的名字:\n");
// gets、fgets和scanf只能多选一
gets(name);
// 输出
fputs(name,stdout);// 标准的输出
return 0;
}
puts
语法:
puts(const char *s);
功能:
输出一个字符串
说明:
字符串可以包含转义字符
案例:
#include <stdio.h>
int main(int argc,char *argv[])
{
// 创建一个数组,用来存放人的名字
char name[20];
printf("请输入您的名字:\n");
// gets、fgets和scanf只能多选一
gets(name);
// 输出
puts(name);// 标准的输出
return 0;
}
字符串转数值
-
strtol
long strtol(const char *str, char **endptr, int base);
将字符串转换为长整型数。
参数说明:
str
:指向要转换的字符串的指针。endptr
:一个指向字符指针的指针。如果提供了这个参数,并且转换成功, 设置为指向第一个未转换字符的指针。如果*endptr
将被endptr
是NULL
,则不使用它。base
:用于指定转换的基数。它可以是 2 到 36 之间的值,或者是特殊值 0。如果 base 是 0,则函数会根据字符串的前缀(如 “0x” 或 “0X” 表示十六进制,“0” 表示八进制,否则默 认为十进制)来自动确定基数。
-
strtoul
unsigned long strtoul(const char *str, char **endptr, int base);
将字符串转换为无符号长整型数
-
strtod
double strtod(const char *str, char **endptr);
-
atoi
int atoi(const char *str);
-
atol
long atol(const char *str);
将字符串转换为长整型数(不推荐使用,建议使用
strtol
)。 -
atof
double atof(const char *str);
将字符串转换为双精度浮点数(不推荐使用,建议使用
strtod
)。
案例:
#include <stdio.h>
#include <stdlib.h>
int a = 10;
}
int main(int argc,char *argv[])
{
printf("%lo,%ld,%lx\n",strtol("12",NULL,8),strtol("12",NULL,10),strtol("12",NULL,16));
printf("%lo,%ld,%lx\n",strtol("012",NULL,0),strtol("12",NULL,10),strtol("0x12",NULL,0));
int a = 10;
printf("%p,%lx\n",&a,&a);
return 0;
}