;分段故障(堆芯倾倒(";使用malloc函数时发生错误。我了解到malloc的初始化值充满了垃圾内存。该部分是否出现分段故障错误?
#include <stdio.h>
#include <stdlib.h>
int chnum;
char *getstr(void)
{
char *str1 = (char *)malloc(sizeof(char) * chnum);
printf("Write a string: ");
gets(str1);
return str1;
}
int main(void)
{
printf("What is the maximum length of a string? ");
scanf("%d",chnum);
char *set = getstr();
printf("string : %s n",set);
free(set);
return 0;
}
- malloc的铸造结果被认为是一种糟糕的做法
- 不要使用全局变量在函数之间传递数据。使用它的函数参数
- 您不必像定义1那样
sizeof(char)
- 始终检查malloc的结果
- 不使用
gets
而使用fgets
- 始终检查scanf的结果
- 在
scanf
中,将指针传递给对象,而不是对象本身 - 可能失败的功能的检查结果(
getstr
(
#include <stdio.h>
#include <stdlib.h>
char *getstr(size_t chnum)
{
char *str1 = malloc(chnum);
if(str1)
{
printf("Write a string: ");
fgets(str1, chnum, stdin);
printf("n");
}
return str1;
}
int main(void)
{
size_t chnum;
printf("What is the maximum length of a string? ");
if(scanf("%zu", &chnum) == 1)
{
printf("n");
fgetc(stdin);
char *str = getstr(chnum);
if(str)
{
printf("string : %s n",str);
free(str);
}
}
return 0;
}