c - 将命令行中的字符存储到 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++;
}
}
}
有人可以帮帮我吗?
解决方案
你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);
推荐阅读
- google-sheets - Google Sheets Connected Sheets 数据透视表无法按月分组日期
- reactjs - 如何使用 history.push 从主页到其他组件?
- android - 如何在其他 Fragment 中使用 PreferenceFragment 设置?
- swift - Xcode 13中的guard语句为什么永远不会执行?
- python - 谁能解释如何计算密码的加密和解密的执行时间?
- vb.net - 为每个循环简化 linq 表达式
- google-apps-script - 从选项卡名称创建列表但希望排除特定选项卡(谷歌表)
- html - 在其他非固定 pos 图像上叠加图像?
- sql-server - 试图找到两组 Lat-longs 之间的距离
- android - 如何以及在哪里更好地在 Android 上执行周期性代码