我正在尝试(在C语言中)创建一个包含每个命令行参数的字符串,并在它们之间留有空格。我写的是这个:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char * argv[]){
char * str = malloc(3 * sizeof(char));
* str = 'n';
* (str + 1) = '\0';
if (argc != 1){
int istr = 0;
int iarg = 0;
for (int i = 1; i < argc; i++){
str = realloc(str, sizeof(char) * (strlen(str) + strlen(argv[i]) + 1));
while (iarg < strlen(argv[i])){
str[istr] = argv[i][iarg];
istr++;
iarg++;
}
istr++;
str[istr] = ' ';
iarg = 0;
}
}
return 0;
}
但是它不起作用,添加打印不会帮助我理解原因。您看到问题了吗?
问题是分配的内存似乎被清零(或在复制的字符串之后至少为零),并且您以这种方式将' '
放在字符串终止'\0'
的后面。因此,字符串在第一个参数之后终止,并且打印时仅显示第一个arg,并且strlen
将返回直到此'\0'
的字符数。更改此
Heyho