通过char读取字符串直到C / C ++行结尾
如何在一个字符串中读取一个字符串,并在到达行尾时停止? 我使用fgetc函数从文件读取并将字符放入数组(后者将数组更改为malloc),但无法弄清楚当到达行尾时如何停止
试过这个(c是来自文件的char变量):
if(c=="\0")
但它给出了错误,我无法将指针与整数进行比较
文件看起来像(单词的长度未知):
one two three
所以这里有一些问题:1)我可以将c与\ 0进行比较,因为\ 0是两个符号(\和0)或者它被计为一个(与\ n相同的问题)2)也许我应该使用\ n? 3)如果上面的建议有误,你会建议什么(注意我当时必须阅读字符串一个字符)
(注意我对C ++很新(并自己编程))
您想使用单引号:
if(c=='\0')
双引号(“)用于字符串,它是字符序列。单引号(’)用于单个字符。
但是,行尾由换行符表示,即’\ n’。
请注意,在这两种情况下,反斜杠都不是字符的一部分,而只是表示特殊字符的一种方式。 使用反斜杠可以表示各种不可打印的字符以及可能会混淆编译器的字符。
你原来问题的答案
如何在一个字符串中读取一个字符串,并在到达行尾时停止?
在C ++中,非常简单,即:使用getline 。 该链接显示了一个简单的示例:
#include #include int main () { std::string name; std::cout << "Please, enter your full name: "; std::getline (std::cin,name); std::cout << "Hello, " << name << "!\n"; return 0; }
你真的想用C做这个吗? 我不会! 问题是,在C中,你必须分配用于放置所读字符的内存吗? 多少个字符? 你提前不知道。 如果分配的字符太少,则每次都必须分配一个新的缓冲区,以实现读取的字符多于您腾出的空间。 如果你过度分配,你就是在浪费空间。
C是低级编程的语言。 如果您不熟悉编程和编写简单的应用程序来逐行读取文件,只需使用C ++即可。 它为您完成所有内存分配。
您之后关于"\0"
和行尾的问题由其他人回答并适用于C和C ++。 但是如果你正在使用C,请记住,重要的不仅仅是行尾,而是内存分配。 而且你必须小心不要超出你的缓冲区。
如果您正在使用C函数fgetc
,则应检查下一个字符是否等于新行字符或EOF。 例如
unsigned int count = 0; while ( 1 ) { int c = fgetc( FileStream ); if ( c == EOF || c == '\n' ) { printF( "The length of the line is %u\n", count ); count = 0; if ( c == EOF ) break; } else { ++count; } }
或者使用do-while循环重写代码会更好。 例如
unsigned int count = 0; do { int c = fgetc( FileStream ); if ( c == EOF || c == '\n' ) { printF( "The length of the line is %u\n", count ); count = 0; } else { ++count; } } while ( c != EOF );
当然,您需要插入自己的读取xgaracters处理。 这只是一个例子,你可以使用函数fgetc
来读取文件的行。
但是如果程序是用C ++编写的话,那么如果你使用std::ifstream
和std::string
类并使用std::getline
函数读取整行会好得多。
文本文件的行末尾没有\ 0。 它有\ n。 \ n是一个字符,而不是字符串,因此必须用单引号括起来
if(c ==’\ n’)