C 使用从函数到主函数的字符串

C 使用从函数到主函数的字符串,c,arrays,function,char,c-strings,C,Arrays,Function,Char,C Strings,我的一个函数从文本文件中读取行并存储到变量中。我需要一种在主函数中使用该变量的方法。我试过几种方法,但都不管用。有人能帮我吗 #include <stdio.h> #include <string.h> int test(const char *fname, char **names){ char usernames[250][50]; FILE *infile; char buffer[BUFSIZ]; int i =0;

我的一个函数从文本文件中读取行并存储到变量中。我需要一种在主函数中使用该变量的方法。我试过几种方法,但都不管用。有人能帮我吗

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

int test(const char *fname, char **names){

    char usernames[250][50];
    FILE *infile;
    char buffer[BUFSIZ];
    int i =0;

    infile = fopen(fname, "r");


    while(fgets(buffer,50,infile)){
        strcpy(usernames[i],buffer);
        printf("%s",usernames[i]);
        i++;
    }

    int x, y;
    for(y = 0; y < 250; y++)
        for(x = 0; x < 50; x++)
            usernames[y][x] = names[y][x];

    return 0;
}


int main()
{
    char *names;
    test("test.txt", &names);
}
#包括
#包括
int测试(常量字符*fname,字符**名称){
字符用户名[250][50];
文件*填充;
字符缓冲区[BUFSIZ];
int i=0;
infle=fopen(fname,“r”);
而(FGET(缓冲区,50,填充)){
strcpy(用户名[i],缓冲区);
printf(“%s”,用户名[i]);
i++;
}
int x,y;
对于(y=0;y<250;y++)
对于(x=0;x<50;x++)
用户名[y][x]=名称[y][x];
返回0;
}
int main()
{
字符*名称;
测试(“test.txt”和名称);
}

有人能帮忙吗?我已经很长时间没有用C编码了。

在C中,调用方应该为它需要的字符串分配内存,否则,没有人知道应该由谁来释放内存。然后,您可以传递一个指向将填充它的函数的指针

int main() {
    char names[250][50];
    test("test.txt", names);
    for (int i=0; i < 50; i++) {
        printf("File %d: %s", i, names[i], 250);
    }     
}


void test(const char *fname, char(*names)[50], int maxWords){

    FILE *infile;
    int i =0;
    char buffer[50];

    infile = fopen(fname, "r");

    while(fgets(buffer,50,infile) && i < maxWords){
        strcpy(usernames[i],names[i]);
        i++;
    }    
}
intmain(){
字符名称[250][50];
测试(“test.txt”,名称);
对于(int i=0;i<50;i++){
printf(“文件%d:%s”,i,名称[i],250);
}     
}
无效测试(常量char*fname,char(*name)[50],int-maxWords){
文件*填充;
int i=0;
字符缓冲区[50];
infle=fopen(fname,“r”);
while(fgets(缓冲区、50、填充区)和&i
首先,您不为
名称分配空间。。。这不会使用严格的“警告为错误”进行编译。
names
的类型与
char**
不兼容。您应该在
test
s原型中指定名称为
char(*names)[50]
,并通过
250
以及边界检查。@Storytler谢谢,修复了它,我记不起
char(*names)[50]
的语法我写了大约12年了C@shix没有错误消息的“将不编译”对。。。此外,我相信已经有足够的证据来回答这个问题