Tag: fgets

如何在C中读取和覆盖文本文件?

我有一个文本文件text.txt读取(为简单起见) this is line one this is line two this is line three 为了简单起见,我只是试图将每行中的第一个字符设置为’x’,所以我想要的结果是 xhis is line one xhis is line two xhis is line three 所以我打开text.txt文件并尝试用所需的输出覆盖每一行到同一文本文件。 在while循环中,我将每行中的第一个字符设置为“x”。 我还将变量“line”设置为等于1,因为如果它在第一行,我想回放到文件的开头,以便在开始时而不是在文件的末尾进行覆盖。 然后增加行,以便在下一次迭代时跳过倒带,并且应该继续覆盖第2行和第3行。 它适用于第一线。 有人有任何解决方案吗? 顺便说一句,我已经在stackoverflow和其他网站上进行了广泛的研究,但没有运气。 这是我的代码,我的输出也在下面: #include #include #define MAX 500 int main() { char *buffer = malloc(sizeof(char) * MAX); FILE *fp = fopen(“text.txt”, “r+”); int line […]

C中的fgets()函数

我知道每个人都告诉我使用fgets而不是因为缓冲区溢出而得到的。 但是,我对fgets()的第三个参数感到有点困惑。 据我了解,fgets依赖于: char * fgets ( char * str, int num, FILE * stream ); char* str是我的输入存储位置的ptr。 num是要读取的最大字符数。 但什么是FILE *stream ? 如果我只是提示用户输入字符串(如句子),我应该输入“ stdin ”吗? 我应该在main()附近的顶部键入FILE *stdin吗?

fgets做什么?

它不相等: fgets (answer, 256, stdin); if (strncmp(answer, “sta”, 4) == 0) printf(“omg, it’s equal”); 这段代码是: fgets (answer, 4, stdin); if (strncmp(answer, “sta”, 4) == 0) printf(“omg, it’s equal”); 为什么? 这是因为在第一个,答案没有\ 0在第四个地方我猜(如果我把它改为3而不是4它的工作原理)。 但是fgets做了什么? 字符串答案在第一个是str \whitespace*253\0″ ?在第二个是str\0 ?谢谢。

如果你不知道要读取的字符数,如何使用fgets?

我需要读取一个文件并将文本从它发送到一个字符串,以便我可以解析它。 但是,程序不会准确知道文件的长度,所以如果我想使用fgets() ,或者有更好的选择,我该怎么办? 注意: char *fgets(char *str, size_t num, FILE *stream);

fgets()包括字符串中的新行

我从我的文档中提取了所有文字,并将所有文字都打印在屏幕上,但在打印完每个文字后,都有一个空行。 如何避免在字符串中读取或添加此新行? int main(void) { FILE *f; f = (“words”, “r”); char string[100]; while (fgets(string, 100, f)) { printf(“%s”, string); } } 这段代码没有复制粘贴,所以我可能忘记了小块但应该可以工作。 在words.txt中,每行都有一个单词。 我的程序将它们全部打印到屏幕上,但在每个单词后添加一个新行。 我不希望它添加新行或空格。 因此,如果txt在一行上有Hello而在下一行有Bye ,我希望它打印HelloBye 。 最终程序的目标不是打印字符串,而是将字符串用于其他内容,因此我需要一个字符串,其中只有文本末尾没有空格或新行。

fgets()总是以null方式终止它返回的字符串吗?

这样做安全吗? fgets是否使用null终止缓冲区,或者我应该在调用fgets和调用clean之前将第20个字节设置为null? // strip new lines void clean(char *data) { while (*data) { if (*data == ‘\n’ || *data == ‘\r’) *data = ‘\0’; data++; } } // for this, assume that the file contains 1 line no longer than 19 bytes // buffer is freed elsewhere char *load_latest_info(char *file) { FILE *f; char *buffer […]

c分段故障fgets

int main( int argc, char** argv) { FILE *inFilePtr = fopen(*(argv + 1), “r”); char *rawdata = malloc(sizeof(char) * 100); float *ary = malloc(sizeof(float) * 50); int counter = 0; float averageAns; int count = 0; while (count < 1 ){ //fgets(rawdata, 50, inFilePtr); //I have tried both fscanf(inFilePtr, "%s", rawdata); *(ary + counter) = […]

fgets和gets之间的区别

fgets()和gets()什么区别? 当用户点击“输入”时,我正试图打破我的循环。 它与gets()一起运行良好,但我不想使用gets() 。 我尝试使用fgets()和scanf()但是我没有与gets()相同的结果。 无论用户在文本中输入什么, fgets()打破循环! 这是我的代码: void enter(void) { int i, for(i=top; i Enter name (ENTER to quit): “); gets(cat[i].name); if(!*cat[i].name) break; printf(“.> Enter Last Name: “); scanf(“%s”,cat[i].lastname); printf(“.> Enter Phone Number: “); scanf(“%s”,cat[i].phonenum); printf(“.> Enter e-Mail: “); scanf(“%s”,cat[i].info.mail); printf(“.> Enter Address: “); scanf(“%s”,cat[i].info.address); printf(“\n”); } top = i; }

程序正在跳过fgets而不允许输入

基本上如标题所示..当我的程序从控制台运行时,它会询问你是否要加密或解密..当我输入e或E时,它会创建一个新的空行(直到我输入一些那种文字),然后一次显示“输入文字”和“输入密钥”行。 因此,在控制台中它看起来像: 你想(E)ncrypt还是(D)ecrypt? Ë asdf jkl; <—-随机用户输入以使程序继续.. 输入要加密的文本:输入用于加密的密钥:(用户输入) 然后程序退出.. //message to be encrypted char text[250]; //word to use as the key char key[50]; //stores the encrypted word char encrypted[250]; char answer; printf(“Would you like to (E)ncrypt or (D)ecrypt? “); scanf(” %c”, &answer); if(answer == ‘e’ || answer == ‘E’) { printf(“Enter the text you want […]

用fscanf或fgets忽略空格?

我想知道是否有任何方法可以忽略fscanf或fgets函数的空格。 我的文本文件在每一行上有两个字符,可以用空格分隔,也可以不用空格分隔。 我需要读取两个字符并将每个字符放在不同的数组中。 file = fopen(argv[1], “r”); if ((file = fopen(argv[1], “r”)) == NULL) { printf(“\nError opening file”); } while (fscanf(file, “%s”, str) != EOF) { printf(“\n%s”, str); vertexArray[i].label = str[0]; dirc[i] = str[1]; i += 1; }