Tag: fgets

无法在C中创建shell(Seg-Fault和ferror)

我一直在关注如何制作自己的shell的教程,但我已经被困了几天了。 两件事情: 编译和运行此代码时,它将随机出现分段错误,我无法弄清楚原因。 if语句`if(ferror!= 0)`似乎总是如此。 这很奇怪,因为我不明白为什么fgets()在main()函数中失败了。 有关这些主题的任何信息(或有关创建此shell的其他主题)将不胜感激。 #include #include #include #include #define MAXSIZE 512 int parseCmd(char *cmd, char *args[]) { printf(“LOGGER: parseCmd(cmd=%s, args=%p)\n”, cmd, args); char cmdDelims[] = {‘ ‘,’>’}; char *cmdReader; cmdReader = strtok(cmd, cmdDelims); int i = 0; while (cmdReader != NULL) { args[i] = strdup(cmdReader); printf(“LOGGER: args[%d]=%s\n”, i, args[i]); cmdReader = strtok(NULL, […]

如何使用fgets从用户读取多行输入并使用C中的fput将其写入文件?

我想从用户读取输入(多行)并使用fputs()将其写入文件。 这是我的代码 #include #include int main() { FILE *fp; char s[25]; fp=fopen(“myname”,”w”); if(fp==NULL) { perror(“Error opening file\n”); exit(1); } while(fgets(s,25,stdin)!=NULL) fputs(s,fp); fclose(fp); return 0; } 从用户那里获得输入后,我使用Ctrl + C来关闭程序的输入提示(我正在使用linux)。 然后,如果我打开文件,它什么都没有。 我怎么解决这个问题? 使用fputs()和fgets()有什么问题吗?

使用fgets和sscanf进行意外重复

这是我的代码的一部分。 gets和sscanf的目的是扫描由一个空格分隔的三个变量。 如果通过,则再次输出指令。 否则,输出错误并退出程序。 我想使用7长度字符数组来限制行中的数字,只获得类似’g 3 3’的格式。 但是我的代码似乎有些不对劲。 #include int main (void) { char line[7]; char command; int x, y; while(1){ /* problem: g 4 4 or g 4 4 can also pass */ fgets(line, 7, stdin); nargs = sscanf(line, “\n%c %d %d”, &command, &x, &y); if(nargs != 3){ printf(“error\n”); return 0; } printf(“%c %d […]

为什么fgets()和strncmp()在这个C代码中无法进行字符串比较?

这是我遇到的一个非常有趣的问题。 我做了很多关于堆栈溢出的搜索,发现其他人有类似的问题。 所以我相应地写了我的代码。 我最初有fscan()和strcmp() ,但这完全轰炸了我。 所以其他post建议使用fgets()和strncmp()并使用长度来比较它们。 我试着通过打印出两个字符串的大小来调试我正在做的事情。 我想,也许他们有/n或漂浮在那里或其他东西搞乱了(另一篇文章谈到了这一点,但我认为这不会发生在这里)。 因此,如果大小相同,则strncmp()的限制应该相同。 对? 只是为了确保他们被认为是正确的比较。 现在,我知道如果字符串相同,则返回0否则使用strncmp()返回负数。 但它不起作用。 这是我得到的输出: perk repk Enter your guess: perk Word size: 8 and Guess size: 8 Your guess is wrong Enter your guess: 这是我的代码: void guess(char *word, char *jumbleWord) { size_t wordLen = strlen(word); size_t guessLen; printf(“word is: %s\n”,word); printf(“jumble is: %s\n”, jumbleWord); char […]

C:用于构建char *的链接列表的fgets用法

我是否错误地使用了fgets() ? 我正在尝试构建一个字符串链接列表( char * ),将每个新行添加到LL的末尾。 我正在从文件中读取这些行,但由于某种原因,每个行都被正在处理的当前行覆盖,只有在while循环中使用fgets() while ,add函数似乎正在正确接收每一行。 如果我在main()单独添加行,则没有问题。 这是一个示例输入文件: input.txt中: This life, which had been the tomb of his virtue and of his honour, is but a walking shadow; a poor player, that struts and frets his hour upon the stage, and then is heard no more: it is a tale told by […]

从stdin读取fgets时,为什么忽略第一个字符串?

可能重复: Dev-C ++输入被跳过 我试图使用fgets从stdin读取一个字符串数组,但我想要读取的第一个字符串总是被忽略。 是什么导致了这个问题? #include int main() { int i; struct material { char name[30]; float price, kg; }; unsigned m,nr; printf(“Lorry capacity=”); scanf(“%u”, &m); printf(“Number of materials=”); putchar(‘\n’); scanf(“%u”, &nr); struct material list[nr]; for (i=0; i<nr; i++) { printf("Name="); fgets(list[i].name, 30, stdin); } putchar('\n'); for (i=0; i<nr; i++) { printf("%s ", list[i].name); } […]

如何在读取所有字母之前确定fgets是否停止?

我做这样的事情: char buf[100]; int n = 0; char save[100][100]; while (fgets(buf,100, file)!=NULL) { strcpy(save[n], buf); printf(“%s”,buf); n++; } 我之前打开了一个带有error handling的FILE = *file 。 我只想读取小于或等于100个字符的行。 那些具有更多字符的,我想忽略并向“save”数组或perror或stout流写一些特殊的消息。 但是,我怎么可能知道我是否只有100个字符,或者我的fgets是否只是停止读取它的极限? 我怎么知道我首先是否超过100?

为什么当我们在文件中写\ n时它会转换为\ r \ n组合?

我从书中读到这个概念,当我们尝试使用fputs()将文件写入文件时,fputs()将\ n转换为\ r \ n组合,然后如果我们使用fgets()读回同一行,则反向转换发生意味着\ r \ n回转换为\ n。 我不知道这背后的目的是什么?

无需按下即可获得单个字符

我试图从用户那里获得单个字符输入而无需用户输入。 我试过这个: #include int main() { int input; for (;;) { input = getchar(); printf(“%d\n”, input); } } 但是,用户不仅需要按Enter键,还会注册两个按键(输入字符和换行符),即: $ ./tests a 97 10 c 99 10 由于我总是希望用户输入一个字符,并希望将此字符设置为char或int ,如何在不等待\n情况下获取字符。 我也试过使用fgets ,但因为我在循环中等待用户输入,所以只是连续执行printf而不会阻塞直到输入。 我的预期输出是: a97 b98 … 注意:我目前正在使用OSX,但我很满意适用于OSX或Linux的解决方案。

ftens返回由popen返回的FILE的错误

我正在尝试从我的C代码执行命令行,但是当我到达fgets()函数时,我得到了一个N​​ULL错误。 void executeCommand(char* cmd, char* output) { FILE *fcommand; char command_result[1000]; fcommand = popen(cmd, “r”); if (fcommand == NULL) { printf(“Fail: %s\n”, cmd); } else { if (fgets(command_result, (sizeof(command_result)-1), fcommand) == NULL) printf(“Error !”); strcpy(output, command_result); } pclose(fcommand); } 我的命令是: java -jar 为什么我有来自fgets的NULL结果,尽管当我尝试在终端中执行相同的命令时,它按预期工作。