c - 如何获取 char 数组指向的元素数?
问题描述
我正在研究,但找不到方法。我将 2 传递char array pointers
给一个函数并用值填充这两个数组。有没有办法获得填充数组的大小?
我size_t size = sizeof(*arguments)/sizeof(arguments[0])
已经尝试过了,但是结果给了我 1,我知道为什么它通过研究给我 1 的结果,但我只是找不到一种方法来获得正确的数组长度(数组中有多少元素的值)。如果这是不可能的,我该如何解决这个问题?我需要知道这一点,因为我想为我的函数提供任何数组的最后一个值NUL
L。exec
我的程序工作如下:
用户输入执行的 2 个程序名称。但是这 2 个程序由";"
. 所以我有 2 个大小可以变化的数组,这取决于终端中的输入。
void getArguments(char * [],char * [], int ,char * []);
int main(int argc, char * argv[]){
pid_t pid,pid2;
char * arguments2[argc/2+1];
char * arguments[argc/2+1];
getArguments(arguments, arguments2,argc,argv);
if((pid=fork())==-1){
printf("Error");
}
else if(pid == 0){
execvp(arguments[0],arguments);
}
else{
if((pid2 = fork())== -1){
printf("Error" );
}
else if(pid2 == 0 ){
execvp(arguments2[0],arguments2);
}
else{
int status;
wait(&status);
exit(0);
}
}
return 0;
}
void getArguments(char * arguments[], char * arguments2[],int argc, char * argv[]){
int i=0;
while(strcmp(argv[i+1],";")!=0){
arguments[i] = argv[i+1];
i++;
}
arguments[argc/2-1]= NULL;
int j = i+2;
int k = 0;
for( ;j<=argc; j++){
arguments2[k] = argv[j];
k++;
}
arguments2[argc/2-1]=NULL;
}
解决方案
不,如果你只有一个指针,你就无法获得数组的大小。您必须将大小作为单独的参数传递给您的函数。
编辑:我现在明白你需要从你的函数返回数组中使用的数字元素。您可以添加两个接收大小的整数指针变量,也可以将第一个未使用的元素设置为 NULL,以便调用者知道它何时位于填充部分的末尾。
例如:
char * arguments2[argc]; // as you don't know the result, do not divide by 2: it may be too small!
char * arguments[argc];
int size1=0, size2=0;
getArguments(arguments, &size1, arguments2, &size2, argc, argv);
和:
void getArguments(char *arguments[], int *size1, char *arguments2[], int *size2, int argc, char *argv[])
{
// ...
*size1= i;
//...
*size2= j;
}
推荐阅读
- python - 查找连续索引 pandas
- node.js - iconv-lite 无法正确解码所有内容,即使我正在使用正确的解码
- python - 如何从列表中删除元组?
- javascript - CSS 巨大的网格问题
- c++ - 尝试深度复制唯一指针时的 C++ 内存访问冲突
- python - 得到 numpy 的正方形和立方体并附加它
- authentication - 基于 LDAP 的 Kubernetes 用户身份验证
- c++ - C 风格的演员表与函数风格的演员表相同吗?
- javascript - 在不知道 url 的情况下从 blob WKWebView 下载图像
- django - Docker / Django:pipenv x 要求