gpt4 book ai didi

c - 将字符串数组传递给函数

转载 作者:行者123 更新时间:2023-11-30 18:05:58 24 4
gpt4 key购买 nike

我的程序是

#define ARRLEN 10
#define SIZEALCO 128
#define MAX_STRING_LENGTH 12

在主函数中,

char TYPEDATA_XML_FN[ARRLEN][SIZEALCO];
char TYPEDATA_MD5_FN[ARRLEN][SIZEALCO];
char identifier[ARRLEN][MAX_STRING_LENGTH];
char Temppath[SIZEALCO];
int arraynum;

// ...

arraynum = 0;
for(arraynum = 0; arraynum <ARRLEN; arraynum++)
{
/* Create the file name with the path*/
strcpy(Temppath,"/fw/TYPEDATA/");
nameFil(Temppath,identifier[arraynum],TYPEDATA_XML_FN[arraynum],TYPEDATA_MD5_FN[arraynum]);
}

子功能是:

void nameFil(char *SourPath,char *InPinName,char *FilePathNameXml,char *FilePathNameMd5)
{
sprintf(FilePathNameXml, "%s\\%s_TYPEDATA.XML",SourPath,InPinName);
sprintf(FilePathNameMd5, "%s\\%s_TYPEDATA.MD5",SourPath,InPinName);
}

我检查了你的例子。我用过(试用)

char** a = calloc(ARRLEN, sizeof(char *));
for(i = 0; i < ARRLEN ; ++i)
a[i] = ucmalloc(MAX_STRING_LENGTH);
pase(a);

子功能:

void pase(char b[ARRLEN][MAX_STRING_LENGTH])
{
// ...
}

现在我收到警告消息“警告:从不兼容的指针类型传递‘pase’的arg 1”。

实际上,我想传递完整的字符串数组标识符,TYPEDATA_XML_FN,TYPEDATA_MD5_FN。现在我将单个字符串传递给子函数。请指导我。谢谢您

最佳答案

原型(prototype) void pase(char b[ARRLEN][MAX_STRING_LENGTH]) 相当容易误导,

void pase(char b[][MAX_STRING_LENGTH])

会更好,因为否则会涉及边界检查(第一个数组维度被忽略)。

你得到“不兼容的指针类型”的原因是因为a是一个指针数组。如果a递增(作为指针本身),那么地址将增加指针的大小。但是,b 是大小为 MAX_STRING_LENGTH 的数组的数组,因此如果 b 递增,则该值将增加 MAX_STRING_LENGTH。

分配数组a的方式(可能)不会为您提供连续的内存,而这正是这里所需要的。您可以使用指针数组来实现您想要的目的,但您确实必须决定您想要做什么。如果你想使用 [][] 表示法,那么你需要

calloc(MAX_STRING_LENGTH,ARRLEN);

关于c - 将字符串数组传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5913621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com