对不起,我英语不好, 我制作了一个从File1读取行并将其向后打印到File2的程序 在File1中,所有行的末尾都有\ n,最后一行除外。它不必是雪人。如果我只是在最后一行中没有strcat \ n的情况下运行程序,则输出File2将显示为底部。因此,我尝试将\ n strcat到该进程的最后一行strcat(buffer [9],“ \ n”);工作,但strcat(buffer [9],'\ n');不是。为什么会这样?
// FILE 1
Do you wanna build a snowman?\n
Come on lets go and play\n
I never see you anymore\n
Come out the door\n
It's like you've gone away-\n
We used to be best buddies\n
And now we're not\n
I wish you would tell me why!-\n
Do you wanna build a snowman?\n
It doesn't have to be a snowman.
// FILE 2
It doesn't have to be a snowman.Do you wanna build a snowman?\n
I wish you would tell me why!-\n
And now we're not\n
We used to be best buddies\n
It's like you've gone away-\n
Come out the door\n
I never see you anymore\n
Come on lets go and play\n
Do you wanna build a snowman?\n
include <stdio.h>
include <string.h>
define LINE 50
int main(int argc, char *argv[])
{
if (argc < 3)
{
puts("Usage : hw9 inputFileName OutputFileName");
exit(1);
}
FILE *fp, *fp2;
fp = fopen(argv[1],"r");
fp2 = fopen(argv[2], "w");
char *buffer[15][LINE];
char *buffer2[15];
if(fp == NULL || fp2 == NULL)
{
printf("File open error! \n");
return 1;
};
int i = 0;
while (fgets(buffer[i],LINE,fp)!=NULL)
{
buffer2[10-i] = buffer[i];
printf("buffer2[%d] : %s\n", 10-i, buffer2[10-i]);
i++;
}
working!
strcat(buffer[9], "\n");
error! why?
//strcat(buffer[9], '\n');
fprintf(fp2, buffer2[1]);
for (int i = 2; i <= 10; ++i)
fprintf(fp2, buffer2[i]);
fclose(fp);
fclose(fp2);
return 0;
}
答案 0 :(得分:0)
在C语言中,双引号用于表示字符串常量,而单引号则用于表示单个字符。
microbenchmark::microbenchmark(
for.set.2cond = fun1(copy(DT)),
for.set.ind = fun2(copy(DT)),
for.get = fun3(copy(DT)),
for.SDcol = fun4(copy(DT)),
for.list = fun5(copy(DT)),
for.set.if =fun6(copy(DT))
)
#> Unit: microseconds
#> expr min lq mean median uq max neval cld
#> for.set.2cond 59.812 67.599 131.6392 75.5620 114.6690 4561.597 100 a
#> for.set.ind 71.492 79.985 142.2814 87.0640 130.0650 4410.476 100 a
#> for.get 553.522 569.979 732.6097 581.3045 789.9365 7157.202 100 c
#> for.SDcol 376.919 391.784 527.5202 398.3310 629.9675 5935.491 100 b
#> for.list 69.722 81.932 137.2275 87.7720 123.6935 3906.149 100 a
#> for.set.if 52.380 58.397 116.1909 65.1215 72.5535 4570.445 100 a
是一个字符串常量,包含"\n"
字符,后跟一个终止于该字符串的空字节,类型为\n
,而const char []
是字符{{1} },类型为'\n'
(所有字符常量也是如此)。
\n
函数期望int
作为第二个参数。像strcat
这样的字符串常量是合格的,因为数组(在大多数情况下)会衰减为指向第一个元素的指针。传递const char *
不会不起作用,因为您正在将"\n"
传递给需要指针的函数。这导致'\n'
的编码值被视为指针,int
尝试解除引用,从而调用undefined behavior。
答案 1 :(得分:0)
char * strcat ( char * destination, const char * source );
接受const char *参数,就像“ \ n”是..一样,但是'\ n'只是char类型的