如何找到在C中写入文件时删除换行符的更好方法?
这段代码运行良好,我理解每一行,除了一行如何找到在C中写入文件时删除换行符的更好方法?,c,newline,C,Newline,这段代码运行良好,我理解每一行,除了一行string[--len]='\0'。--len做了什么,以及--len是如何删除换行符的 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { FILE * fp1 = fopen("file.csv", "r"); FILE * ft1 = fopen("new.csv
string[--len]='\0'代码>。--len
做了什么,以及--len
是如何删除换行符的
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE * fp1 = fopen("file.csv", "r");
FILE * ft1 = fopen("new.csv", "a");
char take[200], string[200];
char * data1 = NULL;
char * data2 = NULL;
char * data3 = NULL;
while(fgets(take, 200, fp1)){
data1 = strtok(take, ",");
data2 = strtok(NULL, ",");
data3 = strtok(NULL, ",");
printf("Enter your string: ");
fgets(string, sizeof(string), stdin);
// Only fprintf is not able to remove newline. That's why fprintf is used inside this code
size_t len = strlen(string);
if(len>0 && string[len-1] == '\n')
{
string[--len] = '\0';
fprintf(ft1, "%s,%s,%s\n", data1, string, data3);
break;
}
}
return 0;
}
#包括
#包括
#包括
int main()
{
FILE*fp1=fopen(“FILE.csv”,“r”);
文件*ft1=fopen(“new.csv”,“a”);
char take[200],string[200];
char*data1=NULL;
char*data2=NULL;
char*data3=NULL;
而(fgets(采取,200,fp1)){
数据1=strtok(取“,”);
data2=strtok(NULL,“,”);
data3=strtok(NULL,“,”);
printf(“输入字符串:”);
fgets(字符串、sizeof(字符串)、stdin);
//只有fprintf不能删除换行符。这就是为什么在代码中使用fprintf
尺寸长度=strlen(字符串);
如果(len>0&&string[len-1]='\n')
{
字符串[--len]='\0';
fprintf(ft1、%s、%s\n)、数据1、字符串、数据3);
打破
}
}
返回0;
}
如果string==“abc\n”
,则数组包含以下值:
string[0] == 'a'
string[1] == 'b'
string[2] == 'c'
string[3] == '\n'
string[4] == '\0' // this is the null terminator
和len==4
string[--len] = '\0';
从len
中减去1
,使其成为3
,然后将'\0'
分配给数组的该元素string[3]
最初包含换行符,但这会用空终止符覆盖它。因此字符串现在包含:
string[0] == 'a'
string[1] == 'b'
string[2] == 'c'
string[3] == '\0' // this is the null terminator
这是没有换行符的“abc”
。执行时,您对字符串中的值和len
的值了解多少?您对--
了解多少?@ScottHunter字符串
是我在文件中输入的值,但执行后,它将数据打印到文件中,并添加了换行符string
。为了删除换行符,我得到了一些帮助并编写了代码,但不理解--len
--
是减量运算符。C中的字符串存储为带有空终止字符的数组。希望这能给你一些单词,你可以通过谷歌来了解更多。我最喜欢的是。当然,字符串不必来自fgets()
,但它们通常来自。它是防弹的:在没有换行符或应用于空字符串时是无害的。非常感谢!