在要在 main 中使用的函数内初始化字符指针数组
Initialise array of character pointers inside a function to be used in main
如何在函数内初始化字符指针数组。应该注意的是,长度是动态地来自函数内部的其他计算。我在 main()
中找不到长度。为简单起见,我使用 rand()
来解释场景。
有什么方法可以初始化具有一定长度的字符指针数组,而不会将长度从 main()
传递到 setArgs()
?
使用以下代码我得到错误:
temp.c:8:6: error: invalid use of array with unspecified bounds 8 | args[length];
#include<stdio.h>
#include<stdlib.h>
void setArgs(char* (*args)[])
{
int length = (rand() % 5) + 2;
args[length];
args[0]="hello[=10=]";
args[1]="jack[=10=]";
}
int main()
{
char* myArgs[]={NULL};
setArgs(&myArgs);
for(int i=0;i<2;i++)
{
printf("%s", myArgs[i]);
}
return 0;
}
你有两个选择。动态分配内存或先生成长度:
1.
#include<stdio.h>
#include<stdlib.h>
void setArgs(char *** args)
{
int length = (rand() % 5) + 2;
*args = malloc(sizeof(char *)*length);
(*args)[0]="hello[=10=]";
(*args)[1]="jack[=10=]";
}
int main()
{
char ** myArgs = NULL;
setArgs(&myArgs);
for(int i=0;i<2;i++)
{
printf("%s", myArgs[i]);
}
free(myArgs);
return 0;
}
或 2.
#include<stdio.h>
#include<stdlib.h>
void setArgs(char ** args)
{
args[0]="hello[=11=]";
args[1]="jack[=11=]";
}
int main()
{
int length = (rand() % 5) + 2;
char* myArgs[length];
setArgs(myArgs);
for(int i=0;i<2;i++)
{
printf("%s", myArgs[i]);
}
return 0;
}
args[length];
不会改变长度,只是在索引 length
处做一个 array-access
这是一种方法:
#include<stdio.h>
#include<stdlib.h>
char **setArgs()
{
int length = (rand() % 5) + 2;
char **args;
args = malloc(length*(sizeof(char*)));
args[0]="hello[=10=]";
args[1]="jack[=10=]";
return args;
}
int main()
{
char** myArgs;
myArgs = setArgs();
for(int i=0;i<2;i++)
{
printf("%s", myArgs[i]);
}
return 0;
}
如何在函数内初始化字符指针数组。应该注意的是,长度是动态地来自函数内部的其他计算。我在 main()
中找不到长度。为简单起见,我使用 rand()
来解释场景。
有什么方法可以初始化具有一定长度的字符指针数组,而不会将长度从 main()
传递到 setArgs()
?
使用以下代码我得到错误:
temp.c:8:6: error: invalid use of array with unspecified bounds 8 | args[length];
#include<stdio.h>
#include<stdlib.h>
void setArgs(char* (*args)[])
{
int length = (rand() % 5) + 2;
args[length];
args[0]="hello[=10=]";
args[1]="jack[=10=]";
}
int main()
{
char* myArgs[]={NULL};
setArgs(&myArgs);
for(int i=0;i<2;i++)
{
printf("%s", myArgs[i]);
}
return 0;
}
你有两个选择。动态分配内存或先生成长度:
1.
#include<stdio.h>
#include<stdlib.h>
void setArgs(char *** args)
{
int length = (rand() % 5) + 2;
*args = malloc(sizeof(char *)*length);
(*args)[0]="hello[=10=]";
(*args)[1]="jack[=10=]";
}
int main()
{
char ** myArgs = NULL;
setArgs(&myArgs);
for(int i=0;i<2;i++)
{
printf("%s", myArgs[i]);
}
free(myArgs);
return 0;
}
或 2.
#include<stdio.h>
#include<stdlib.h>
void setArgs(char ** args)
{
args[0]="hello[=11=]";
args[1]="jack[=11=]";
}
int main()
{
int length = (rand() % 5) + 2;
char* myArgs[length];
setArgs(myArgs);
for(int i=0;i<2;i++)
{
printf("%s", myArgs[i]);
}
return 0;
}
args[length];
不会改变长度,只是在索引 length
这是一种方法:
#include<stdio.h>
#include<stdlib.h>
char **setArgs()
{
int length = (rand() % 5) + 2;
char **args;
args = malloc(length*(sizeof(char*)));
args[0]="hello[=10=]";
args[1]="jack[=10=]";
return args;
}
int main()
{
char** myArgs;
myArgs = setArgs();
for(int i=0;i<2;i++)
{
printf("%s", myArgs[i]);
}
return 0;
}