小编rob*_*s35的帖子

如何用fgets()从stdin读取?

我写了下面的代码来从终端窗口读取一行,问题是代码陷入无限循环.行/句子的长度是未定义的,因此我计划将其分成几部分读入缓冲区,然后将其连接到另一个字符串,该字符串可以通过realloc相应的方式进行扩展.有人可以发现我的错误或建议更好的方法来实现这个目标吗?

#include <stdio.h>
#include <string.h>

#define BUFFERSIZE 10

int main (int argc, char *argv[])
{
    char buffer[BUFFERSIZE];
    printf("Enter a message: \n");
    while(fgets(buffer, BUFFERSIZE , stdin) != NULL)
    {
        printf("%s\n", buffer);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c stdin fgets

31
推荐指数
2
解决办法
18万
查看次数

堆上分配的C free char*

以下代码示例中是否存在内存泄漏,因为我已在堆上为已释放的名称分配了内存?如果我添加免费(person-> name); 在免费(人)之前; 然后我在VS中得到一个运行时错误"CRT检测到应用程序在堆缓冲区结束后写入内存".

header.h:

#ifndef HEADER
#define HEADER

typedef struct person {
 char *name;
} Person;

#endif
Run Code Online (Sandbox Code Playgroud)

由source.c:

#include <stdio.h>
#include <stdlib.h>
#include "header.h"

#define BUFFERSIZE 500

int main (int argc, char* argv[]){
 Person *person = NULL;
 char buffer[BUFFERSIZE];
 printf("Enter name\n");
 fgets(buffer, BUFFERSIZE, stdin);
 {
  char *name; 
  person = malloc(sizeof(Person));
  name = malloc(strlen(buffer));
  strcpy (name,buffer);
  person->name = name;
 }
 free(person); 
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

谢谢,罗布

c heap free memory-leaks char

5
推荐指数
2
解决办法
9169
查看次数

标签 统计

c ×2

char ×1

fgets ×1

free ×1

heap ×1

memory-leaks ×1

stdin ×1