《C和指针》第一章

1 第一章

C标准库中几个常用的IO函数

int puts(void *str):

从str中提取字符直到遇到第一个'\0'为止,将这些字符串加上'\n'后发送给stdout。

int main(void)
{
    char input[100];
    input[0] = 'a';
    input[1] = 'b';
    input[2] = 'c';
    input[3] = '\0';
    input[4] = 'd';
    puts(input);    
    return 0;
}

会返回 abc

char* gets(void *str):

从stdin中读取一行,直到遇见换行符为止,gets函数会将换行符'\n'替换为'\0'写入到传入的指针中;

请注意gets函数在将字符写入数组中时并不会检查数组是否越界,如果字符个数大于数组长度,这可能会带来一些不可预料的后果,超出的部分会写入到内存中数组之后的位置,这个位置有可能是下一个指令的地址,有可能是其他局部变量,修改他们会带来麻烦,所以谨慎使用。

c11中废弃了gets函数,可以用更安全的fgets来实现同样的功能。


int scanf(const char *restrict, ...):

scanf用法类似于printf,不同的是出第一个参数之外,其它参数表示从stdin写入的地址,应当是一个指针类型。
scanf("%d",&num[1]),他会跳过前面的空格,直到遇到第一个空格表示结束,将结果存处在对应的地址上 。


char* strncpy(char *dest,char *src,int n):

从源指针src复制n个元素到dest中 。


char*strcpy(char *dest,char *src):

将源指针src中的字符包括'\0'复制到dest中,此函数并不会检查dest是否能够容纳得下,因此需要保证dest足够大 。


int getchar(void):

从标准输入stdin中获取一个字符,常规来说返回值应该是char,事实上返回值是int类型是为了保证读取到的EOF结束符也能正常返回,EOF在stdio.h被定义,值为-1。

#ifndef EOF
# define EOF (-1)
#endif

这里应当注意不同的平台char类型所表示的范围不同,ARM体系,char是不带符号的,取值范围0到255。而一些其他的平台char的范围就可能是-128到127。因此考虑兼容性,就不能把EOF赋值给一个char类型,这可能会导致错误,我觉得getchar应该是考虑到这个原因才这样设计的。

posted @ 2023-04-24 17:39  l1nux_kernel  阅读(26)  评论(0)    收藏  举报