【发布时间】:2021-01-26 06:57:30
【问题描述】:
由于某种原因,这段代码给了我一个损坏的最终字符——写入文件和 printf 都没有输入最后一个字符
#include <stdio.h>
#include <stdlib.h>
#include "ssem.h"
int main(){
int sem_WF, sem_WF_key = 123456, fileID, callStatus;
char user_input[21];
/*sem_WF = sem_open(sem_WF_key);*/
fileID = creat ("data", 384);
if (fileID<0) {printf("Error with creat"); return 0;}
printf("Enter up to 20 characters: ");
fgets(user_input, 20, stdin);
printf("%s\n", user_input);
callStatus = write(fileID, user_input, 20);
if (callStatus<0) {printf("error with write"); return 0;}
callStatus = close(fileID);
if (callStatus<0) {printf("error with close"); return 0;}
return 0;
}
【问题讨论】:
-
fgets(user_input, 20, stdin);将在user_input中写入除'\0'之外的最多19 个字符(总共最多20 个),顺便说一句,您正确定义为能够容纳21 个字符。我很懒...我通常这样做fgets(foo, sizeof foo, stdin) -
@pmg,如果我可以插话,我认为你一点也不懒,写
sizeof foo实际上比写20更费力;) -
@anastaciu,好吧,在我有时使用
100,或1000,或500,或20,或256,...(取决于我不知道是什么)而且检查我使用的内容比输入sizeof buf更麻烦(通常这种数组也称为buf):) -
@pmg,我明白了,这是最好的懒惰