`

fgets 不会自动丢弃换行符‘\n’ 被这个函数坑了下

阅读更多
原函数:
   char *Is_ip6Get(char *is_ip6, char *hostname){
	FILE *fp = NULL;
	char temp[512];
	char path[1024];
	sprintf(path, "%s%s", IS_IP6, hostname);

	if (access(path, F_OK)) return NULL;

	if (NULL == (fp = fopen(path, "r"))) return NULL;

	if (fp){
		fgets(temp, 1024, fp);
		is_ip6 = temp;
	}
	return is_ip6;
}
一下代码是输出到页面js的:
     if(IPv6)
	 printf("var IPv6=\"%s\";\n", IPv6);
     else
        printf("var IPv6=\"\";\n");

会出现以下问题:
       var IPv6=“1314
”;
页面就会报错


原因:
  fgets函数不会自动丢弃换行符\n
    
改进函数:

char *Is_ip6Get(char *is_ip6, char *hostname){
	FILE *fp = NULL;
	char temp[512];
	char path[1024];
	int len = 0;
	sprintf(path, "%s%s", IS_IP6, hostname);

	if (access(path, F_OK)) return NULL;

	if (NULL == (fp = fopen(path, "r"))) return NULL;

	if (fp){
		fgets(temp, 1024, fp);
		if(!(strncmp(temp, "(null)", 6)))
			return NULL;
		len = strlen(temp);
		temp[len - 1] = '\0';
		is_ip6 = temp;
	}
	return is_ip6;
}
分享到:
评论

相关推荐

    C++读取到回车换行符问题处理

    今天在编写99乘法在线小游戏(看过我的 linux下c实现的数据库备份(第四版)应该知道我在那里提过^.^)的时候遇到读取文件的信息遇到回车换行符的烦恼。 比如我文件里面有如下信息: name=qizexi sex=man 我希望读取...

    fgets与fputs函数

    执行后,`str1`将包含"Love ,I Have",包括行尾的换行符`\n`(它会被读取但不会显示),并在末尾自动添加字符串结束符`\0`。 `fputs` 函数则用于将字符串写入到一个文件中。它的原型是: ```c int fputs(const char...

    c语言fgets fputs 读写文件

    通过以上内容,我们可以看出`fgets`和`fputs`这两个函数在C语言中的重要性,以及如何使用这些函数来实现对文件的基本操作。同时,也介绍了一些其他相关的文件操作函数,如`fclose`、`_fcloseall`、`fread`和`fwrite`...

    fgets( )和fputs( )(建议用其完全代替gets和puts函数)

    - `fgets()`不会自动去除字符串中的换行符,如果不需要,可以在读取后手动移除。 - 使用`fgets()`时要注意长度控制,避免缓冲区溢出,这比`gets()`更安全。 ### fputs() 函数 `fputs()` 用于将字符串写入到指定...

    fgets函数与fputs函数

    4. 如果有一行,含有LINE_SIZE个字符(包括换行符),要想把这行读入缓冲区,请把参数n设为LINE_SIZE+1。 fputs函数 fputs函数的原型为:int fputs(const char *s, FILE *stream);该函数向指定的文件写入一个字符...

    c++换行符知识点总结

    \r回车符将光标移到当前行的开头,不会换到下一行。如果接着输出的话,本行以前的内容会被逐一覆盖。例如: ```cpp cout ; ``` endl换行符 endl换行符不仅将光标移到下一行的开头,还会将缓冲槽的内容输出到控制台...

    如何解决fgets读取popen内容阻塞的问题

    select 函数可以用来检测文件描述符是否可读或可写,从而避免 fgets 函数的阻塞。 例如,在获取 4G 模块的信号强度信息时,可以使用 popen 函数来创建一个子进程,执行 AT 指令,以获取信号强度信息。然后,使用 ...

    fgets函数用法

    这意味着即使`bufsize`很大,`fgets`也只会读取到换行符`\n`或文件结束符EOF为止。 #### 文件流指针偏移原理 当使用`fgets`读取文件时,文件流指针的移动遵循以下规则: - 第一次读取时,指针会从文件开头开始读取...

    MATLAB【按行读取】格式文本txt函数.pdf

    这两个函数的主要区别在于对换行符的处理。`fgetl`会忽略行尾的换行符,返回不含换行符的字符串,而`fgets`则会将换行符一同读入字符串。 例如,`fgetl`的使用方式如下: ```matlab fid = fopen('filename.txt', 'r...

    有关fget函数的应用以及扩展_05_08_234803.docx

    例如,fgets 函数会将换行符也读取进来,导致字符串的末尾多出一个换行符。为了解决这个问题,我们可以使用以下代码: ```cpp char str[100]; fgets(str, 100, stdin); str[strlen(str) - 1] = '\0'; ``` 在上面的...

    fgets_fgets_

    这个函数可以帮助我们方便地处理文本文件,避免了因为读取大块数据可能导致的内存问题。现在我们来深入探讨一下`fgets()` 的使用方法和相关知识点。 ### fgets() 函数定义 `fgets()` 函数的原型定义如下: ```c ...

    第12章 文件操作-按行读写文件1

    值得注意的是,`fputs()`不会像`puts()`那样自动在字符串末尾添加换行符,除非字符串本身包含换行符。 2. **按行读文件**: - `fgets()` 函数则用于从文件中按行读取字符串。它的原型是 `char *fgets(char *s, int...

    C 语言统计字符个数,可以直接编译使用

    这个函数从标准输入流中读取最多100个字符,直到遇到换行符或EOF为止。运行fgets函数后,用户键入的任何字符都会被保存在string变量中,包括换行符。 程序接着使用strlen函数计算string中的字符数,但要注意这里...

    getchar函数是C语言标准库.pdf

    在这个例子中,`getchar()`的返回值被赋值给变量`c`,然后检查是否等于换行符。如果不是,循环继续,继续读取下一个字符。 如果你需要一次性读取一整行的输入,`fgets()`函数会更加合适。`fgets()`可以从标准输入或...

    详解C语言gets()函数与它的替代者fgets()函数

    在这个例子中,`fgets()` 会读取最多5个字符(`LEN - 1`),并保留末尾的换行符。如果输入的字符串长度超过5个字符,`fgets()` 会在达到限制时停止读取,剩余的字符将不会被读取。 总结来说,`gets()` 函数由于其...

    C语言文件操作中 fgets与fputs 函数详解

    fgets函数在到达行末时停止,在这种情况下,`str`字符串将会被一个新行符结束。如果fgets函数达到`[num - 1]`个字符或者遇到EOF,`str`字符串将会以null结束。fgets函数成功时返回`str`字符串,失败时返回NULL。 ...

    C语言文件操作函数大全.doc

    7. `fgets()` 函数:`fgets(s, size, stream)`读取`stream`中的一个字符串,直到遇到换行符、文件末尾或读取了`size-1`个字符。结果字符串以NULL终止。`fgets()`对于读取整行数据非常有用。 8. `fileno()` 函数:`...

Global site tag (gtag.js) - Google Analytics