c - 初学者电话簿
问题描述
嘿,上周刚开始接触代码。谁能告诉我我的代码有什么问题?当我编译它时,它似乎可以工作,但是当我去那里的文件时,我只是一堆问号。前(姓名:D...)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
FILE *file= fopen("phonebook.csv", "a");
if(file==NULL)
{
return 1;
}
char* name= malloc(sizeof(char));
printf("Enter your name:");
scanf("%s", name);
free(name);
char* number= realloc(name, sizeof(char));
printf("Enter your number:");
scanf("%s", number);
free(number);
fprintf(file, "Name: %s\n, Number:%s\n", name, number );
fclose(file);
}
解决方案
严重错误:
- 您将需要多个字节来存储正长度字符串。另一方面,您只分配一个字节。
realloc()
是改变现有缓冲区的长度。在这种情况下,您应该在这种情况下分配独立的另一个缓冲区。- 不得使用传递给
free()
.
其他要点:
- 您应该限制读取长度以避免缓冲区溢出。大小限制最多应为
(buffer size) - 1
(-1
用于终止空字符)。 - 您应该检查
malloc()
. - 您应该检查
scanf()
.
固定代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
FILE *file= fopen("phonebook.csv", "a");
if(file==NULL)
{
return 1;
}
char* name= malloc(sizeof(char) * 129);
if(name==NULL)
{
fclose(file);
return 1;
}
printf("Enter your name:");
if(scanf("%128s", name)!=1)
{
fclose(file);
free(name);
return 1;
}
char* number= malloc(sizeof(char) * 129);
if(number==NULL)
{
free(name);
fclose(file);
return 1;
}
printf("Enter your number:");
if(scanf("%128s", number)!=1)
{
free(name);
free(number);
fclose(file);
return 1;
}
fprintf(file, "Name: %s\n, Number:%s\n", name, number );
free(name);
free(number);
fclose(file);
}
固定代码(无错误检查):
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
FILE *file= fopen("phonebook.csv", "a");
if(file==NULL)
{
return 1;
}
char* name= malloc(sizeof(char) * 129);
printf("Enter your name:");
scanf("%128s", name);
char* number= malloc(sizeof(char) * 129);
printf("Enter your number:");
scanf("%128s", number);
fprintf(file, "Name: %s\n, Number:%s\n", name, number );
free(name);
free(number);
fclose(file);
}
推荐阅读
- webpack-4 - webpack:使用 2 个入口文件时,两个文件都包含相同的 css - 有解决方法吗?
- angular - 无法读取 HTML 中未定义的属性“temp”,
- flutter - 将“多个”有状态和无状态小部件存储在一个 dart 文件中。没事吧?
- jsp - 如何在从oracle数据库获取的jsp页面中播放视频
- javascript - WebRTC 和 textTrack (caption) to Peer 是可能的吗?
- xml - 如何在 xslt 文件中正确使用 for-each?
- python - 如何从元组中删除括号(两边)?
- c++ - 读取 CSV 文件中的整数
- python - 将带有命令的电子邮件发送到其他电子邮件 discord.py
- java - 如何以给定的总和最佳地将多重集分配到子多重集中