【问题标题】:cant assign values to file variable [closed]无法为文件变量赋值[关闭]
【发布时间】:2013-01-23 11:08:37
【问题描述】:

我对 C 很陌生,我试图用函数的结果填充文件宽数组变量,这是一个简单的代码示例来说明我的意思,谁能指出我为什么这不起作用的方向?

#include <sys/types.h>
#include <dirent.h>
#include <regex.h>
#include <stdio.h>
#include <gtk/gtk.h>
#include <string.h>
#include <unistd.h>
#include <pwd.h>

static gchar *external_names;

void directories(int arraylength, gchar internal_names[][100]){
    int n;
    for (n = 0; n < arraylength; n++)
    {
        strcpy(external_names[n], internal_names[n]);
    }
    for (n = 0; n < arraylength; n++)
    {
        printf("%s internal with %s external\n",internal_names[n], external_names[n]);
    }
}

void main()
{
    gchar anotherarray[10][100];
    directories(10, anotherarray);
}

[编辑]最新代码

#include <sys/types.h>
#include <dirent.h>
#include <regex.h>
#include <stdio.h>
#include <gtk/gtk.h>
#include <string.h>
#include <unistd.h>
#include <pwd.h>

static gchar *external_names[100];

void directories(int arraylength, gchar internal_names[][100]){
    int n = 0;
    //gchar external_names[arraylength][100];
    for (n = 0; n < arraylength; n++)
    {
        printf("%s %i\n","before", n);
        strcpy(external_names[n], internal_names[n]);
        printf("%s %i\n","after", n);
    }
}

void main()
{
    int n;
    gchar anotherarray[10][100];
    for (n = 0; n < 10; n++)
    {
        strcpy(anotherarray[n],"test");
    }
    directories(10, anotherarray);
    for (n = 0; n < 10; n++)
    {
        printf("%s internal with %s external\n",anotherarray[n], external_names[n]);
    }
}

【问题讨论】:

  • 您正在通过该指针写入内存中的不确定地址;不是文件。使用 C 运行时库中的 FILE api,以 fopen()fprintf()fwrite() 等开头。希望能帮助您入门。
  • 你不能使用变量的值,除非你给它赋值。在分配任何值之前,您使用external_names(在此代码中:strcpy(external_names[n], internal_names[n]);)。
  • 我没有尝试写入文件,只是文件宽(静态)变量,'strcpy(external_names[n], internal_names[n]);)' 没有分配 internal_names 的值 [ n] 到外部数组?

标签: c arrays gtk


【解决方案1】:
static gchar *external_names;  //one dimensional array.

external_names 是一维数组,您正尝试从二维数组 internal_names 分配它。

strcpy(external_names[n], internal_names[n]);

当您增加索引时会发生这种情况。

&internal_names[1] =  &internal_names[0] + size_t*100
&external_names[1] =  &external_names[0] + size_t*1

为了解决这个问题,

static gchar (*external_names)[100];

应该可以。

【讨论】:

  • 啊好的,所以我想将其声明为静态 gchar *external_names[];我猜?
  • with 'static gchar *external_names[100];' strcpy(external_names[n], internal_names[n]) 处的代码段错误;由于外部数组未初始化,但如果我在块内初始化它似乎没有得到值,我将更新的代码添加到原始帖子中以显示我的意思
  • @Mike 你应该从这个问题的接受答案中得到一些答案。 stackoverflow.com/questions/3901962/…
  • 再次感谢 sibrajas,帮助了很多人 :)
【解决方案2】:

这个:

static gchar *external_names;

只是一个字符指针,而不是像您的anotherarray 这样的字符串数组。

当您在 strcpy() 调用中编制索引时,第一个参数是 char,这是错误的,因为 strcpy() 需要两个指针。

【讨论】:

    猜你喜欢
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 2015-03-24
    • 2014-10-31
    • 1970-01-01
    • 2020-08-28
    • 2022-01-20
    相关资源
    最近更新 更多