用C语言编写Nb空格字符

用C语言编写Nb空格字符,c,whitespace,C,Whitespace,我只是想知道如何用C写一定数量的空白字符。 例如,如果我想在文件描述符中写入大小空白字符,我会这样写: int fd = open(filename, O_RDWR|O_CREAT, 0600); .... char* spaces = malloc(strlen(f2)); memset(spaces,' ', size); if(write(fd, sentence1, size) == -1){ perror("Error1 while writin

我只是想知道如何用C写一定数量的空白字符。 例如,如果我想在文件描述符中写入大小空白字符,我会这样写:

    int fd = open(filename, O_RDWR|O_CREAT, 0600);

    ....   

 char* spaces = malloc(strlen(f2));
 memset(spaces,' ', size);

 if(write(fd, sentence1, size) == -1){
   perror("Error1 while writing in the file");
   fprintf(stderr, "Error[%s, %s] : %s\n", sentence1, filename, strerror(errno));
   return EXIT_FAILURE;  
 }

 ...

 if(write(fd, spaces, strlen(f2)) == -1){
  perror("Error2 while writing in file");
  fprintf(stderr, "Error[%s]:%s\n", filename, strerror(errno));
  return EXIT_FAILURE;
 }

 free(spaces);

 ....    
我在写函数中出错。有人能告诉我我的代码有什么问题吗?我该如何解决这个问题

[编辑]刚刚按照@Gregg的建议更新了我的代码,但我遇到了以下错误:

 *** glibc detected *** ./io2: free(): invalid next size (fast): 0x0974b008 ***
======= Backtrace: =========
/lib/i686/cmov/libc.so.6(+0x6b281)[0xb7673281]
/lib/i686/cmov/libc.so.6(+0x6cad8)[0xb7674ad8]
/lib/i686/cmov/libc.so.6(cfree+0x6d)[0xb7677bbd]
./io2[0x80489c3]
/lib/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0xb761ec76]
./io2[0x8048671]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:09 842293     /home/debianbox/posix/io/io2
08049000-0804a000 rw-p 00000000 08:09 842293     /home/debianbox/posix/io/io2
0974b000-0976c000 rw-p 00000000 00:00 0          [heap]
b74e2000-b74ff000 r-xp 00000000 08:01 12068      /lib/libgcc_s.so.1
b74ff000-b7500000 rw-p 0001c000 08:01 12068      /lib/libgcc_s.so.1
b7500000-b7521000 rw-p 00000000 00:00 0
b7521000-b7600000 ---p 00000000 00:00 0
b7607000-b7608000 rw-p 00000000 00:00 0
b7608000-b7748000 r-xp 00000000 08:01 16133      /lib/i686/cmov/libc-2.11.2.so 
b7748000-b774a000 r--p 0013f000 08:01 16133      /lib/i686/cmov/libc-2.11.2.so 
b774a000-b774b000 rw-p 00141000 08:01 16133      /lib/i686/cmov/libc-2.11.2.so 
b774b000-b774e000 rw-p 00000000 00:00 0
b775e000-b7760000 rw-p 00000000 00:00 0
b7760000-b7761000 r-xp 00000000 00:00 0          [vdso]
b7761000-b777c000 r-xp 00000000 08:01 12335      /lib/ld-2.11.2.so 
b777c000-b777d000 r--p 0001a000 08:01 12335      /lib/ld-2.11.2.so 
b777d000-b777e000 rw-p 0001b000 08:01 12335      /lib/ld-2.11.2.so 
bfe06000-bfe1b000 rw-p 00000000 00:00 0          [stack]
Abandon
由于未知原因,它在空闲(空格)行失败

[编辑]我终于纠正了我的问题@dmh200建议,我错误地使用了大小变量和strlen(f2)。没用的问题。
感谢您的帮助,
write()
的第二个参数必须指向一个缓冲区,该缓冲区至少包含
size
参数中指定的字节数

常量字符串
仅包含两个字节-一个空格和一个尾随nul字节。使用
size>2调用
write(fd,“,size)
是一个错误

如果你知道你总是写少于10个空格,那么你可以:

write(fd, "          ", size);
如果不知道需要多少空间,则可以动态分配缓冲区,用空间填充,然后写入:

char *spaces = malloc(size);
memset(spaces, ' ', size);
write(fd, spaces, size);
free(spaces);

write()
的第二个参数必须指向一个缓冲区,该缓冲区至少包含
size
参数中指定的字节数

常量字符串
仅包含两个字节-一个空格和一个尾随nul字节。使用
size>2调用
write(fd,“,size)
是一个错误

如果你知道你总是写少于10个空格,那么你可以:

write(fd, "          ", size);
如果不知道需要多少空间,则可以动态分配缓冲区,用空间填充,然后写入:

char *spaces = malloc(size);
memset(spaces, ' ', size);
write(fd, spaces, size);
free(spaces);

错误是什么?大小不是1吗?字符串literal
是一个包含两个元素的数组:即
'
'\0'
。任何试图从数组中读取多于2个的数据的尝试都是错误的。尝试一个循环。write函数返回-1什么是“f2”?您可以互换地使用sizeof(f2)和size,但代码示例中没有显示f2。如果strlen(f2)小于'size'(或者如果'size'未初始化),则可能存在缓冲区溢出问题,这可能会损坏堆,从而导致gdb消息。您的代码应该首先执行'size=strlen(f2')。错误是什么?大小不是1吗?字符串literal
是一个包含两个元素的数组:即
'
'\0'
。任何试图从数组中读取多于2个的数据的尝试都是错误的。尝试一个循环。write函数返回-1什么是“f2”?您可以互换地使用sizeof(f2)和size,但代码示例中没有显示f2。如果strlen(f2)小于'size'(或者如果'size'未初始化),则可能存在缓冲区溢出问题,这可能会损坏堆,从而导致gdb消息。您的代码应该首先执行“size=strlen(f2)”。