我对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]);
}
}
答案 0 :(得分:2)
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];
应该有用。
答案 1 :(得分:1)
此:
static gchar *external_names;
只是一个字符指针,它不是像anotherarray
那样的字符串数组。
当您在strcpy()
调用中编入索引时,第一个参数是char
,这是错误的,因为strcpy()
需要两个指针。