#include <stdio.h>
#include <string.h>
#include <malloc.h>
int IPset(char **str_accip, int *sgin){
char line[1024], *p = NULL;
FILE *fp = NULL;
memset(line, 0, 1024);
*str_accip = (char *)malloc(sizeof(char) * 1024);
fp = fopen("./whj.txt", "r");
if (fp != NULL){
while(fgets(line, 1024, fp)){
if((p = strstr(line, "inner:yes")) != NULL){
*sgin = 1;
fclose(fp);
return -1;
}
if((p = strstr(line, "acc_ip:")) != NULL){
line[strlen(line)-1] = '\0';
p+= 7;
*str_accip = p;
}
}
}else{
fcolse(fp);
fp = NULL;
return -2;
}
fclose(fp);
fp = NULL;
return 0;
}
int main(){
char *str = NULL;
int sgin = 0;
IPset(&str, &sgin);
printf("%s, sgin=%d\n", str, sgin);
if (str != NULL){
free(str);
str = NULL;
}
return 0;
}
编译没问题 运行的时候出现 *** glibc detected *** ./a.out: munmap_chunk(): invalid pointer: 0xbfc572a3 ***
大概原因是在用mallc申请了存储空间后所返回的指针在之后的操作中使所返回的指针的指向发生了变化
str指向p
正确代码:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
int IPset(char **str_accip, int *sgin){
char line[1024], *p = NULL;
FILE *fp = NULL;
memset(line, 0, 1024);
*str_accip = (char *)malloc(sizeof(char) * 1024);
fp = fopen("./whj.txt", "r");
if (fp != NULL){
while(fgets(line, 1024, fp)){
if((p = strstr(line, "inner:yes")) != NULL){
*sgin = 1;
fclose(fp);
return -1;
}
if((p = strstr(line, "acc_ip:")) != NULL){
line[strlen(line)-1] = '\0';
p+= 7;
strcpy(*str_accip, p);
fclose(fp);
return 0;
}
}
}else
return -2;
}
int main(){
char *str = NULL;
int sgin = 0;
IPset(&str, &sgin);
printf("%s, sgin=%d\n", str, sgin);
if (str != NULL){
free(str);
str = NULL;
}
return 0;
}
使用数组:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
int IPset(char *str_accip, int *sgin){
char line[1024], *p = NULL;
FILE *fp = NULL;
memset(line, 0, 1024);
fp = fopen("./whj.txt", "r");
if (fp != NULL){
while(fgets(line, 1024, fp)){
if((p= strstr(line, "inner:yes")) != NULL){
*sgin = 1;
fclose(fp);
return -1;
}
if((p = strstr(line, "acc_ip:")) != NULL){
line[strlen(line)-1] = '\0';
p += 7;
strcpy(str_accip, p);
}
}
}else{
fclose(fp);
fp = NULL;
return -2;
}
fclose(fp);
fp = NULL;
return 0;
}
int main(){
char str[1024];
int sgin = 0;
memset(str, 0, 1024);
IPset(str, &sgin);
printf("%s, sgin=%d\n", str, sgin);
return 0;
}
分享到:
相关推荐
然而,由于其灵活性和简洁性,C语言也容易导致一些常见的编程错误,这往往会给程序的稳定性和可维护性带来挑战。以下是针对C语言中一些典型错误的分析: 1. **命名和书写规范**:良好的命名习惯对于代码的可读性...
C语言是一种基础且强大的编程语言,对于初学者来说,理解并掌握它可能需要克服一些常见的错误。本资源“C语言常见错误”旨在帮助新手程序员识别并预防这些常见问题,从而加速学习过程。以下是一些主要的C语言错误...
在C语言中,`malloc`和`free`是两个非常重要的内存管理函数,它们用于动态地分配和释放内存。理解并能自己实现这两个函数对于深入理解C语言内存管理至关重要。`malloc`函数允许程序在运行时请求特定大小的内存块,而...
C语言提供了动态内存分配的功能,如`malloc`和`free`。不当的内存管理是导致程序崩溃的常见原因,如忘记释放已分配的内存、释放未分配的内存、双重释放同一块内存等。良好的编程习惯,如使用`calloc`代替`malloc`...
**C语言开发工具C-Free详解** C-Free是一款专为C语言开发者设计的集成开发环境(IDE),它提供了全面的功能,帮助程序员进行高效、便捷的代码编写、编译、调试和学习。C-Free不仅适合初学者,也适用于有一定经验的...
**C语言编译器C-free** C语言是一种基础且强大的编程语言,被广泛应用于系统开发、软件工程、嵌入式系统以及游戏开发等多个领域。在学习C语言的过程中,选择一个合适的编译器至关重要,C-Free就是其中的一个优秀...
《C语言教室》教程中,会讲解malloc、calloc、realloc、free等函数的使用,并通过实例强调内存管理的重要性。 C语言的预处理器功能也是其强大特性之一。宏定义和条件编译指令能够提供编译时的配置选项,这对于代码...
free函数是我们再写C语言程序时常用的函数,但是使用时需要注意,一不小心很肯能会引起吐核。 注意:free函数与malloc()函数配对使用,释放malloc函数申请的动态内存。对于free(p)这句语句,如果p 是NULL 指针,...
C-Free是一款专为C语言初学者设计的轻量级集成开发环境(IDE),它以其简洁易用的界面和丰富的功能,使得学习和编写C语言代码变得更加便捷。在深入讲解C-Free之前,我们先来理解一下C语言和编译器的基本概念。 ...
C-Free 5.0是一款备受推崇的C语言编程软件,专为C语言爱好者和开发者设计。相较于Visual C++,C-Free 5.0以其简洁易用的界面和强大的功能赢得了用户的喜爱。它不仅包含了基本的代码编辑、编译、调试等必备功能,还...
9. **错误处理和调试**:在解决这些题目时,你也会遇到编译错误和运行时错误,这将教你如何使用调试工具,理解错误原因并修复它们。 10. **编程思维**:通过不断刷题,你会逐步培养出解决问题的系统思维,学会如何...
《C语言实例教程 Free1.5》是一本专注于教授C语言编程实践的教材。C语言是一种广泛应用的编程语言,以其高效、灵活性和底层控制能力深受程序员喜爱。此教程旨在通过丰富的实例帮助初学者掌握C语言的基本概念和核心...
在C语言的学习过程中,由于其语法特性以及对内存管理的直接操作,初学者常常会遇到各种易犯的错误。这份“C语言中易犯错误集合”文档无疑为学习者提供了宝贵的参考,帮助他们规避陷阱,提升编程技能。下面将详细讨论...
《C语言大全》会介绍如何使用标准库中的错误处理函数,以及如何运用调试工具来查找和修复程序中的错误。这将帮助你培养出编写健壮代码的习惯。 书中的"应用"部分可能包括了C语言在实际项目中的应用案例,比如文件...
C语言提供了malloc、calloc、realloc和free等函数进行动态内存分配和释放,理解内存管理能避免内存泄漏和段错误,提高程序稳定性。 八、错误处理与调试 学会利用assert进行错误检查,了解如何使用printf、scanf等...
10. **错误处理和调试**:学会使用编译器的错误提示,理解运行时错误,使用调试工具(如GDB)进行程序调试。 "压缩包子文件的文件名称列表"中的"C语言TC201E.scr"可能是一个屏幕录制文件或可执行程序,用于辅助教学...
9. **错误处理**:C语言没有内置的异常处理机制,但可以通过返回值、errno全局变量和setjmp/longjmp组合进行错误处理。 10. **实践项目**:为了巩固理论知识,课件可能会包含一些编程练习或小型项目,如实现简单的...
5. **帮助文档**:虽然3.5版本可能没有5.0版本那样丰富的在线帮助和错误提示,但它通常会提供一些基本的C语言参考信息,帮助用户理解和解决编程问题。 6. **适应性**:由于是旧版本,C-Free 3.5对于配置较低的...
6. **内存管理**:C语言允许程序员直接申请和释放内存(malloc, free),这使得C语言既灵活又危险,因为错误的内存管理可能导致内存泄漏或段错误。 7. **位操作**:C语言提供了位运算符,如位与(&)、位或(|)、位...