Tag: fgets

代码在C中没有按预期工作

我正在用C编写一个程序来计算句子中的空格数。 但我还没有设法让它正常工作。 如果我输入类似Hello world 1234的内容 ,当预期输出为5时,我得到的输出是3。 我的代码是: //Program to count number of words in a given Sentence #include #include int main() { char sent[100]; char sentence[] = {‘ ‘, ‘\0’}; printf(“\nEnter a sentence :\n”); gets(sent); strcat(sentence, sent); int l = strlen(sentence), i = 0, count = 0, countCh = 0; printf(“%d”, l); char ch, ch1; […]

搜索在非文件终止的文件中以NULL结尾的字符串

我正在编写一个程序打开两个文件进行读取:第一个文件包含20个名称,我存储在Names[0] = John\0forms的数组中。 第二个文件是一个大文本文件,其中包含20个名称中每个名称的许多出现。 我需要我的程序扫描第二个文件的完整性,每次找到其中一个名称,变量Count递增,等完成程序,文本中出现的所有名称的总数存储在Count 。 这是我的循环,它搜索并计算出现的名称数量: char LineOfText[85]; char *TempName; while(fgets(LineOfText, sizeof(LineOfText), fpn)){ for(a = 0; a<NumOfNames; a++){ TempName = strstr(LineOfText, Names[a]); if(TempName != NULL){ Count++; } } } 无论我做什么,这个循环都不能像我期望的那样工作,但我发现了什么是错的(我想!)。 我的问题是数组中的每个名称都以NULL结尾,但是当文本文件中出现名称时,它不会以NULL结尾,除非它作为一行的最后一个单词出现。 因此,此while循环仅计算任何名称出现在行尾的次数,而不是文本文件中任何位置的任何名称的出现次数。 如何调整此循环以解决此问题? 提前感谢您的任何建议。

如何在fgets中使用feof和ferror(C中的minishell)

我写过这个minishell,但我不确定我是否正确控制错误。 我知道fgets可以返回feof和ferror( http://www.manpagez.com/man/3/fgets/ ),但我不知道如何使用它们。 我已经检查过fgets是否返回一个空指针(表示缓冲区的内容是inditerminate),但我想知道如何使用feof和ferror。 #include #include #include #include #define LINE_LEN 50 #define MAX_PARTS 50 int main () { char* token; char str[LINE_LEN]; char* arr[MAX_PARTS]; int i,j; bool go_on = true; while (go_on == true){ printf(“Write a line:(‘quit’ to end) \n $:”); fgets(str, LINE_LEN, stdin); if (str==NULL) { goto errorfgets; } else { size_t l=strlen(str); […]

从stdin发送任意字节到fgets

我正在使用fgets(user_input,input_len,stdin)提示用户提供的字符串。 我怎样才能将hex \ x04表示的字节发送给程序?

为什么fgets卡在回车上\ r?

我是新来的论坛和c一般,所以请耐心等待我。 我正在尝试编写一个带有文本文件并解析所有单词和字符的ac程序,然后将它们保存到输出文本文件中。 我正在使用C99,Windows 7-64bit,MinGW,记事本,记事本++和用于txt文件的ASNI格式。 我已经读过fgets()比fscanf用于读取输入更好,因为它有缓冲区溢出保护,所以我决定尝试使用它,但它在测试文件中有一些标点符号的问题(我认为这是回车\ r)。 我尝试使用fscanf,除了它跳过所有空格(我可以在以后添加,不关心它),它似乎接受所有文本就好并将其打印在输出文件中。 这是我的测试代码: #include #include #include #include #include void main(int argc, char* argv[]) { int limit=100, flimit=0, flimitmax=1900000000; //I stopped flimitmax short of the 2GB mark char name[limit], copyname[limit]; FILE *data, *output; //Gets the value of a specified data file for reading printf(“\nPlease specify a file to format for data […]

C – 在函数中使用fgets()从stdin读取行

我试图用stgets()从stdin读取行,我想在我的函数中使用fgets(),我认为这是问题所在。 字符串最长可达1024个字符。 当我运行此代码时,我得到“Segmentation fault(core dumped)” #include #include #include #define MAX_SIZE 1025 void print_fgets(); int main() { print_select(); return 0; } void print_select() { char *str; int length; while (fgets( str, MAX_SIZE, stdin)!=NULL) { length=strlen(str); if (length==MAX_SIZE-1 && str[length-1]!=’\n’) { printf(“Error, line overeached buffer!\n”); return 1; } if (str[length-1]==’\n’) str[length-1]=’\0′; printf(“%s\n”, str); } }

fgets不读整行

我有一个简单的函数,它应该从标准输入读取行并将其放入一个char数组中,然后我在循环中调用此函数直到输入EOF。 问题是,对于极长的行(超过10k个字符),fgets只读取多个字符并停止,虽然它没有遇到任何\ n且缓冲区有足够的空间,因此下一次调用此函数会读取其余的这条线。 有这种行为的原因(错误编写的代码,我不知道的一些缓冲区)? 有可能解决它吗? 如果我在代码中出错了,如果你指出它,我将不胜感激。 static int getLine(char** line){ if(feof(stdin)) return 0; int len=0; char* pointer=NULL; int max = 1; while(1){ max+=400; *line=(char*)realloc( *line,max); if(pointer==NULL) pointer=*line; if(fgets(pointer, 401, stdin)==NULL)break; int len1=strlen(pointer); len+=len1; if(len1!=400 || pointer[len1]==’\n’)break; pointer+=len1; } if(len==0)return 0; if((*line)[len-1]==’\n’){ *line=(char*)realloc(*line, len); (*line)[len-1]=’\0′; return len-1;}//without \n return len; }

C中的简单循环和字符串长度

我是新手C.在Visual Studio 2015中编写,我试图通过使用fgets安全地提示用户输入字符串。 我想使用fgets来获取字符串,检查字符串是否太长,并重新启动用户,直到他们输入一个好的字符串。 这是我的代码 /* * Nick Gilbert * COS317 Lab 2 Task 2 */ #include “stdafx.h” int main() { char str[10]; int isValid = 0; while (isValid == 0) { printf(“Please enter a password: “); fgets(str, 10, stdin); if (strlen(str) == 9 && str[8] != ‘\n’) { //http://stackoverflow.com/questions/21691843/how-to-correctly-input-a-string-in-c printf(“Error! String is too long\n\n”); […]

C用户输入和链接列表

我试图从用户输入中获取一个字符串,然后将其与我之前在代码中创建的链接列表进行比较,并找到应该插入字符串的位置。 当用户输入任何内容并点击进入时停止循环。 我能够吸收字符串并找到要插入的位置,但我想要做的是循环直到用户输入空白输入。 这导致我的代码在某处破解,我不太清楚为什么。 我在我的代码中插入了断点来调试它,但我相信我遇到了fgets的问题。 任何帮助都会很棒。 当我说代码“中断”时,输出的样子是这样的: BREAK1: AAAA BREAK2 BREAK4 AAAA 0 BREAK5 字符串和位置是正确的,但它在多行上打印,然后继续循环而不重置。 以下是我的代码:: // NO FILE, SO INTAKE STRINGS /////////////////////////////////////////////////// /////////////////////////////////////////////////// else{ fgets(buff,BUFF_SIZE,stdin); buff[strlen(buff)] = ‘\0’; while (buff[0] != ‘\0’){ printf(“BREAK1: %s\n”, buff); // set curr = root node curr = root; printf(“BREAK2\n”); while (curr->next){ if (strcmp(buff, curr->stringDat) == 1){ insertPnt++; curr […]

fgets()函数无法接受来自命令提示符的消息

我正在尝试创建一个C程序,它提示用户从控制台键入消息,然后显示用户键入的消息,如下例所示: C:>promptTest type your message >>>> test typed : test C:> 这是我的代码: #include #include int main(){ char msg[32]; printf(“type your message >>>>\t”); fgets(msg,sizeof(msg),stdin); msg[strlen(msg) – 1] = ‘\0’; printf(“typed : %s\n”,msg); return 0; } 它可以在Windows7和CentOS上构建,并且可以像上面那样在Windows上正常运行。 但是,它无法在CentOS上运行。 我的意思是没有接受来自提示的任何消息,如下所示: $ ./promptTest type your message >>>> test typed : $ 我怎样才能解决这个问题? 这是关于我的机器的信息。 $ cat /etc/redhat-release CentOS release 6.4 […]