C-设置一个结构数组为空



很抱歉,如果我有点困惑。

我正试图用我从输入文件中读取的值填充结构体数组。我从文件中读取值没有问题。但是当文件非常小并且没有完全填充数组时,剩余的结构体在其中具有随机值,并且我想将这些结构体完全设置为NULL。我之所以尝试这样做,是因为我想遍历这个填充的结构体数组并打印其值,并且我需要查看哪些数组值合法地来自文件。

这是我到目前为止的代码

struct function {
    char name[20];
    int parameterNumer;
};

int main(int argc, const char * argv[])
{
    struct function functionList[10];
    int i =0, j;
    int portNumber;
    char *configFile = argv[1];
    FILE *fp;
    fp = fopen(configFile, "r");
    if(fp == NULL) {
        perror("File not found");
        exit(1);
    }
    fscanf(fp, "%d", &portNumber);
    while(fscanf(fp, "%s %d", functionList[i].name, &functionList[i].parameterNumer) == 2) {
        i++;
    }
    functionList[i] = NULL; //getting an error here
    for(j = 0; functionList[j] != NULL; j++) {  //and here
        printf("%s %d", functionList[j].name, &functionList[j].parameterNumer);
    }

    return 0;
}

初始化数组:

/* Remaining elements zero-d. */
struct function functionList[10] = { { "", 0 } };

如果空字符串或零表示数组中没有填充条目,然后使用空字符串或零int终止for:

for(j = 0; strlen(functionList[j].name); j++) {
for(j = 0; functionList[j].parameterNumber; j++) {

另外,防止while中的functionList越界访问:

while(i < 10 && fscanf(fp,
                       "%s %d",
                       functionList[i].name,
                       &functionList[i].parameterNumer) == 2)
{
    i++;
}

注意,while之后的i的值也将为随后的for循环提供一个终止条件:

for (j = 0; j < i; j++) {

您可以使用calloc()

创建数组
struct function* functionList = calloc(sizeof(struct function), 10);

您也可以使用memset:

memset(functionList, 0, sizeof(functionList));

相关内容

  • 没有找到相关文章

最新更新