首页 > 解决方案 > 将命令行中的字符存储到 C 中的字符数组

问题描述

当我尝试将标准输入存储在 char 数组变量内的程序中时遇到问题。

当它通过这些行时会引发段错误:

procNames[processNumber] = argv[1];

strcpy(procNames[processNumber], proc[0]);

如何将字符存储在数组 procNames 中?

用法是:

(stdin) <CHAR>: <NUMBER>

我想存储按订单介绍的<CHAR>每一个。没有错误的存储,<NUMBER>存储抛出分段错误。<NUMBER><CHAR>

char line[80],proc[80];

// Storing
char procNames[80];
int procPorts[80];

// To iterate
int processNumber = 0;
int actualProcessNumber = 0;

[...]

for(;fgets(line,80,stdin);) {

    sscanf(line,"%[^:]: %d",proc,&port);

    [...]

    if(strcmp(proc,argv[1]) == 0) {
        if (repeatedProc == false) {
            procNames[processNumber] = argv[1];
            procPorts[processNumber] = puerto_udp;
            actualProcessNumber = processNumber;
            processNumber++;
        }

    } else {
        if (repeatedProc == false) {
            strcpy(procNames[processNumber], proc[0]);
            procPorts[processNumber] = port;
            processNumber++;
        }
    }
}

有人可以帮帮我吗?

标签: c

解决方案


procNames是一个字符数组,而不是一个指针数组。数组不能分配,只能复制,procNames[processNumber] = argv[1]实际上应该发出警告/错误。

此外,当您打算拥有一组 - 比如说 - 10 个这样的名称时,您可能的意思是

char procNames[10][80];

然后你可以写

strcpy(procNames[processNumber],argv[1]);

复制字符串argv[1]指向的内容。此外,为了避免您超过procNames-entry 的长度,我建议使用

strncpy(procNames[processNumber],argv[1],80); 

推荐阅读