簡體   English   中英

將char添加到數組中並返回

[英]adding char into an array and returning

我是C語言的新手,正在嘗試理解指針。 在這里,我正在打開文件並閱讀給定的行。 我試圖將這些行添加到數組中,然后從函數中返回它。 我似乎沒有正確附加或訪問數組。 輸出[計數] =狀態; 使用不匹配的char和char *給出錯誤。

我本質上是試圖獲得一個包含文件給出的單詞列表的數組,其中數組中的每個元素都是一個單詞。

char *fileRead(char *command, char output[255]) {

    int count = 0;
    char input[255];
    char *status;

    FILE *file = fopen(command, "r");
    if (file == NULL) {
        printf("Cannot open file\n");
    } else {
        do {
            status = fgets(input, sizeof(input), file);
            if (status != NULL) {
                printf("%s", status);
                strtok(status, "\n");

                // add values into output array
                output[count] = status;
                ++count;
            }
        } while (status);
    }
    fclose(file);

    return output;
}

我通過以下方式訪問fileRead:

...
        char commandArray[255];
        char output[255];
        int y = 0;
        char *filename = "scriptin.txt";
        strcpy(commandArray, fileRead(filename, output));
        // read from array and pass into flag function
        while (commandArray[y] != NULL) {
            n = flagsfunction(flags, commandArray[y], sizeof(buf), flags.position, &desc, &parentrd, right, left, lconn);
            y++;
...

從文件中逐行讀取然后將非空白行存儲到數組(指向char的指針數組(如char* ))的示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//for it does not exist because strdup is not a standard function. 
char *strdup(const char *str){
    char *ret = malloc(strlen(str)+1);
    if(ret)
        strcpy(ret, str);
    return ret;
}

//Read rows up to 255 rows
int fileRead(const char *filename, char *output[255]) {
    FILE *file = fopen(filename, "r");

    if (file == NULL) {
        perror("Cannot open file:");
        return 0;
    }
    int count = 0;
    char input[255];
    while(count < 255 && fgets(input, sizeof(input), file)) {
        char *line = strtok(input, "\n");
        if(line)//When it is not a blank line
            output[count++] = strdup(line);//Store replica
    }
    fclose(file);

    return count;
}

int main(void){
    char *output[255];//(`char *` x 255)
    int number_of_read_line = fileRead("data.txt", output);

    for(int i = 0; i < number_of_read_line; ++i){
        printf("%s\n", output[i]);
        free(output[i]);//Discard after being used
    }

    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM