【问题标题】:address not getting passed to a pointer from main to function. C地址没有被传递给从主函数到函数的指针。 C
【发布时间】:2015-05-01 19:22:22
【问题描述】:

我正在尝试读取函数中的元素并将它们存储在 main 的数组中。我使用指向动态数组的指针,但它不起作用。当我尊重指针时我得到的地址是 NULL 并且程序崩溃了。

这是数组:

char* first_name = malloc(first_name_length*sizeof(char));

来自 main 的函数调用:

get_first_name(fp, first_name_length, first_name);

函数声明:

void get_first_name(FILE* fp, int length,char* first);

函数定义:

void get_first_name(FILE* fp, int length, char* first){

    char c;
    int i = 0;
    int number_of_conversions;

    number_of_conversions = fscanf(fp, "%c", &c);

    while (!isspace(c)){

        first[i] = c;

        number_of_conversions = fscanf(fp, "%c", &c);

        i++;
    }
}

【问题讨论】:

  • fscanf 不会读取空格字符,即使在使用 %c 时也是如此。建议使用 int c; c = fgetc(fp);

标签: c arrays pointers


【解决方案1】:

类似下面的东西可以完成这项工作

void get_first_name(FILE* fp, int length, char* first)
{

    int c;
    int i = 0;

    while ( EOF != (c = fgetc(fp) ) && (' ' != c) && (i < (length -1)) )
    {
        first[i] = c;
        i++;
    }
    // terminate the string
    first[i] = '\0';
}

【讨论】:

  • 这仍然会使程序崩溃
【解决方案2】:
  1. 以读取模式打开文件

fp = fopen("file.txt", "r"));

  1. 确保文件不是空的。 使用 fgetc() 将有助于保持简单。

    void get_first_name(FILE* fp, int length, char* first)
    {
    字符 c;
    整数 i = 0;
    c=fgetc(fp);

    while (c!=EOF && !isspace(c) ){
    第一[i] = c;
    c=fgetc(fp);
    我++;
    }}

3 .如果您出于某种目的使用 fscanf(),则可以使用 fseek() 来检查文件是否为空。

【讨论】:

    猜你喜欢
    • 2020-01-09
    • 2020-12-10
    • 2021-12-27
    • 2019-07-26
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    相关资源
    最近更新 更多