如何在不使用字符串函数的情况下删除 fgets 函数的 \n
How to remove \n of fgets function, without using string functions
有没有办法在不使用字符串处理函数(strlen、strtok、strcspn 等)的情况下,从使用 fgets 读取的字符串末尾删除 \N 字符?
我试过了,但没用
char* remove_newline_char(char *str){
for(int i = 0; i < str[i]; i++){
if(str[i] == '\n'){
str[i] = '[=10=]';
}
}
return str;
}
您的代码在语义上不正确。循环终止表达式 i < str[i]
表示:
is the string index less than the character value at that index?
这当然是无稽之谈 - 索引和字符值无关。
char* remove_newline_char(char* str)
{
int i = 0 ;
while( str[i] != 0 && str[i] != '\n' )
{
i++ ;
}
str[i] = 0 ;
return str ;
}
鉴于此处理特定于由 fgets()
填充的缓冲区而不是通用字符串函数,将输入与处理结合起来可能会有好处,这样它就不会应用于不合适的字符串(即不是来自 fgets()
):
char* freadline( char* str, int num, FILE* stream )
{
char* ret = NULL ;
if( (ret = fgets( str, num, str )) != NULL )
{
int i = 0 ;
while( str[i] != 0 && str[i] != '\n' )
{
i++ ;
}
str[i] = 0 ;
}
return ret ;
}
您不需要遍历整个数组并在每次迭代时检查每个字符。
因为,你已经声明不要使用字符串函数,我不会使用strlen()
函数。
在 fgets()
中,换行符出现在 length - 1
位置。
char* remove_newline_char(char *str){
size_t len = 0;
while (str[len])
len++;
if(str[len - 1] == '\n')
str[len - 1] = 0;
return str;
}
另外,如果你知道字符串的长度,那么你就可以避免while
循环
char* remove_newline_char(char *str, size_t len){
if(str[len - 1] == '\n')
str[len - 1] = 0;
return str;
}
我的循环当然是错误的。这是有效的版本
char* remove_newline_char(char *str){
for(int i = 0; str[i]; i++){
if(str[i] == '\n'){
str[i] = '[=10=]';
}
}
return str;
}
有没有办法在不使用字符串处理函数(strlen、strtok、strcspn 等)的情况下,从使用 fgets 读取的字符串末尾删除 \N 字符? 我试过了,但没用
char* remove_newline_char(char *str){
for(int i = 0; i < str[i]; i++){
if(str[i] == '\n'){
str[i] = '[=10=]';
}
}
return str;
}
您的代码在语义上不正确。循环终止表达式 i < str[i]
表示:
is the string index less than the character value at that index?
这当然是无稽之谈 - 索引和字符值无关。
char* remove_newline_char(char* str)
{
int i = 0 ;
while( str[i] != 0 && str[i] != '\n' )
{
i++ ;
}
str[i] = 0 ;
return str ;
}
鉴于此处理特定于由 fgets()
填充的缓冲区而不是通用字符串函数,将输入与处理结合起来可能会有好处,这样它就不会应用于不合适的字符串(即不是来自 fgets()
):
char* freadline( char* str, int num, FILE* stream )
{
char* ret = NULL ;
if( (ret = fgets( str, num, str )) != NULL )
{
int i = 0 ;
while( str[i] != 0 && str[i] != '\n' )
{
i++ ;
}
str[i] = 0 ;
}
return ret ;
}
您不需要遍历整个数组并在每次迭代时检查每个字符。
因为,你已经声明不要使用字符串函数,我不会使用strlen()
函数。
在 fgets()
中,换行符出现在 length - 1
位置。
char* remove_newline_char(char *str){
size_t len = 0;
while (str[len])
len++;
if(str[len - 1] == '\n')
str[len - 1] = 0;
return str;
}
另外,如果你知道字符串的长度,那么你就可以避免while
循环
char* remove_newline_char(char *str, size_t len){
if(str[len - 1] == '\n')
str[len - 1] = 0;
return str;
}
我的循环当然是错误的。这是有效的版本
char* remove_newline_char(char *str){
for(int i = 0; str[i]; i++){
if(str[i] == '\n'){
str[i] = '[=10=]';
}
}
return str;
}