C “如何添加字符”\";转换为换行符“之前的字符串”\";

C “如何添加字符”\";转换为换行符“之前的字符串”\";,c,newline,fgets,strcat,C,Newline,Fgets,Strcat,我想知道如何获取一行字符串并在新行字符之前添加制表符。现在我正在使用FGET获取线路,然后使用 strcat(line_data, "\t"); 但这只是在换行符后面添加了一个选项卡,假设line\u data有足够的内存: char* newline = strchr(line_data, '\n'); newline[0] = '\t'; newline[1] = '\n'; newline[2] = '\0'; 当然,如果没有,你必须这样做: size_t len = strlen(l

我想知道如何获取一行字符串并在新行字符之前添加制表符。现在我正在使用FGET获取线路,然后使用

strcat(line_data, "\t");

但这只是在换行符后面添加了一个选项卡,假设
line\u data
有足够的内存:

char* newline = strchr(line_data, '\n');
newline[0] = '\t';
newline[1] = '\n';
newline[2] = '\0';
当然,如果没有,你必须这样做:

size_t len = strlen(line_data);
char* newstr = malloc(len + 2); /* one for '\t', another for '\0' */
memcpy(newstr, line_data, len);
newstr[len - 1] = '\t'; /* assuming '\n' is at the very end of the string */
newstr[len] = '\n';
newstr[len + 1] = '\0';

假设
line\u data
有足够的内存:

char* newline = strchr(line_data, '\n');
newline[0] = '\t';
newline[1] = '\n';
newline[2] = '\0';
当然,如果没有,你必须这样做:

size_t len = strlen(line_data);
char* newstr = malloc(len + 2); /* one for '\t', another for '\0' */
memcpy(newstr, line_data, len);
newstr[len - 1] = '\t'; /* assuming '\n' is at the very end of the string */
newstr[len] = '\n';
newstr[len + 1] = '\0';

假设
行\u数据
不包含
'\n'
,则代码不执行任何操作:

你所需要的只是

char *p = strchr(line_data, '\n');
if (p) strcpy(p, "\t\n");

假设
行\u数据
不包含
'\n'
,则代码不执行任何操作:

你所需要的只是

char *p = strchr(line_data, '\n');
if (p) strcpy(p, "\t\n");

字符串
line\u data
的结尾是否已经有一个换行符?字符串
line\u data
的结尾是否已经有一个换行符?1)
memcpy(newstr,line\u data,len);newstr[len+1]='\0'-->
memcpy(newstr,行数据,len+1)2)
*换行符='\t'*(换行符+1)='\n'不会使数组空字符终止。3) 
newline
可以是
NULL
。你的第一行也不会以NULL结尾。@rici好的,我在组合这个时做了很多假设。我对文章进行了编辑,以使第一个示例无效。第二个例子应该是null terminate.1)
memcpy(newstr,line_data,len);newstr[len+1]='\0'-->
memcpy(newstr,行数据,len+1)2)
*换行符='\t'*(换行符+1)='\n'不会使数组空字符终止。3) 
newline
可以是
NULL
。你的第一行也不会以NULL结尾。@rici好的,我在组合这个时做了很多假设。我对文章进行了编辑,以使第一个示例无效。第二个例子应该是null终止。