int main(int argc,char *argv[])
{
int f1,flag,n;
if(argc<3)
{
printf("Correct format: ./a.out <fileName> <string>\n");
exit(-1);
}
f1=creat(argv[1],0666);
if(f1<0)
{
printf("Creatioon error\n");
exit(f1);
}
n=strlen(argv[2]);
printf("%d\n",n);
while(n-->0)
flag=write(f1,argv[2]++,1);
if(flag<0)
{
printf("Write error\n");
exit(flag);
}
close(f1);
return 0;
}
这里flag=write(f1,argv[2]++,1);
为什么我们要做argv[2]++
,为什么要复制的文本长度为1?
答案 0 :(得分:0)
增量是因为它在一个(愚蠢的)循环中:
while(n-->0)
flag=write(f1,argv[2]++,1);
但是你的代码没有缩进,所以看起来有点困难。
argv[2]
是char *
指向在命令行中作为第三个单词输入的字符串,因此递增它会将其逐步转换为字符串中的下一个字符。
这是错误的代码;它应该write(fl, argv[2], n);
一次写出来。当然,仍然必须检查返回值,并且write()
可以循环再次尝试,或者如果有部分写入则恢复。
答案 1 :(得分:0)
长度为1,因为write的第3个参数是1。
你可能想要这个:
/* write second command line argument to the file */
flag=write(f1, argv[2], strlen(argv[2]);