在每个命令行参数中添加一个字符串

问题描述 投票:0回答:2

我正在尝试(在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;
}

但是它不起作用,添加打印不会帮助我理解原因。您看到问题了吗?

c string arguments argv
2个回答
0
投票

问题是分配的内存似乎被清零(或在复制的字符串之后至少为零),并且您以这种方式将' '放在字符串终止'\0'的后面。因此,字符串在第一个参数之后终止,并且打印时仅显示第一个arg,并且strlen将返回直到此'\0'的字符数。更改此


0
投票

Heyho

© www.soinside.com 2019 - 2024. All rights reserved.