fgets函数
char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
第一个参数为数据存放的数组,第二个参数为最大长度,第三个参数为输入源,我们从键盘读入,参数为stdin
可以看到fgets()读取的字符串长度包含了结尾的 ‘\0’,遍历数组时要注意下标越界。strlen(A)-1 为字符串实际长度
LINUX换行是\n,十六进制数值是:0A
通过一个程序
char A[7];
fgets(A,7,stdin);
char *S="hello";
int lengthA = strlen(A)-1;
printf("A=%d\n",strlen(A));
printf("S=%d\n",strlen(S));
printf("lenA:%d\n",lengthA);
printf("start: %c\n",A[0]);
printf("end: %c\n",A[lengthA-1]);
int j;
for (j=0;j<strlen(A);j++)
{
printf("A[%d]:%d %c\n",j,A[j],A[j]);
}
我们使用该函数 当数据不满的时候输入123
输出的结果表示为
第一种情况strlen一共有4个 分别为1 2 3 和\n
如果输入的字符串长度没有超过 n–1,那么系统会将最后输入的换行符 ‘\n’ 保存进来 在第一种情况下最后一个数是A[lengthA-1] 因为没有超过的情况下默认最后一个为/n
第二种情况 数据超过或者刚好等于n-1 数据就会进行截取 保留数据部分
在这种情况下 最后一个数据就是A[lengthA] 因为这是的数据倒数第二位不是\n
1.若有定义char s[5] = { 'h', 'e', 'l', 'l', 'o' };则printf(“%s”,s);的输出结果为( )
A、输出字符串hello后乱码
B、hello
C、h
D、输出数组s的地址
//A 以%s输出字符数组s,会输出字符串,但数组大小为5,结尾没有’\0’结束符,会出现乱码
2.若有定义和语句:
char s[10]; s="abcd"; printf("%s\n",s);
那么结果是(以下u代表空格)( )。
A、输出abcd
B、输出a
C、输出abcduuuuu
D、编译不通过
//D 字符数组不能直接赋入字符串,只能在初始化时赋入字符串。
以下选项中,不能正确赋值的是( )。
A、char s1[10];s1="Ctest";
B、char s2[]={'C', 't', 'e', 's', 't'};
C、char s3[20]="Ctest";
D、char *s4="Ctest\n"
//字符数组只能在初始化时才能用等号赋入字符串。
sprintf函数
include <stdio.h>
#include <string.h>
int main() {
char str[20];
char *str1="/dev/pin";
int pin = 4;
sprintf(str,"%s%d",str1,pin);
printf("%s\n",str);
return 0;
}
输出结果/dev/pin4