Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将2D字符数组传递给另一个函数?_C_Arrays_Pointers_Multidimensional Array - Fatal编程技术网

C 如何将2D字符数组传递给另一个函数?

C 如何将2D字符数组传递给另一个函数?,c,arrays,pointers,multidimensional-array,C,Arrays,Pointers,Multidimensional Array,我肯定以前有人问过这个问题,但在过去的两天里我一直在不断地搜索,无法解决这个问题,所以我希望有人能帮我解决这个问题 对于我的C赋值,我们应该接收每个函数参数作为指针。传递的其中一个值是2D字符数组,在过去的48个多小时里,我一直无法在我的书、笔记、讲师幻灯片等中找到如何正确执行此操作的方法,并实际使其工作 我试图完成的简化代码 void main(){ /* 这是正在传递的值。第一个维度的大小为1000, 第二个维度是一个 包含实际名称的数组,最大名称长度为25。 */ 字符名[1000][25

我肯定以前有人问过这个问题,但在过去的两天里我一直在不断地搜索,无法解决这个问题,所以我希望有人能帮我解决这个问题

对于我的C赋值,我们应该接收每个函数参数作为指针。传递的其中一个值是2D字符数组,在过去的48个多小时里,我一直无法在我的书、笔记、讲师幻灯片等中找到如何正确执行此操作的方法,并实际使其工作

我试图完成的简化代码
void main(){
/*
这是正在传递的值。第一个维度的大小为1000,
第二个维度是一个
包含实际名称的数组,最大名称长度为25。
*/
字符名[1000][25]={'\0'};
读取文件(名称);
}
无效读取文件(字符*名称){
char newName1[4]=“玛丽”;
char newName2[4]=“安娜”;
对于(int i=0;i<5;i++){
名称[0][i]=newName1[i];
}
对于(int i=0;i<5;i++){
名称[1][i]=newName2[i];
}
}
基本上,我试图让
名字[0][x]
拥有
x=“mary”
,让
名字[1][x]
拥有
x=“anna”

(或者更确切地说,
名称[0][0]='m'
名称[0][1]='a'
,等等)

不幸的是,我不能正确传球。我得到的最接近的方法是让它为名字指定一个名字,但不再是了

这方面的任何帮助都会非常好。事实上,和我一起工作的同学中有不少人对此感到困惑。我相信这对有经验的人来说很容易,但我们还没有得到很好的指导,我也找不到很多具体的例子来解决这个问题

正如我所说,我们的讲师特别希望函数参数成为指针

编辑
很好的信息,到目前为止,我非常接近这些例子中的一些。我会给他们一个机会,看看什么有效。

\include
#include <stdio.h>

void read_files(char* names){
    char newName1[4] = "mary";
    char newName2[4] = "anna";
    for(int i = 0; i < 5; i++){
        names[i] = newName1[i];
    }
    int offset = 25;
    for(int i = 0; i < 5; i++){
        names[i + offset] = newName2[i];
    }
}



void main(){
/*
This is the value being passed. The first dimension has a size of 1000, 
to account for 1000 different sorted people. Second dimension is an 
array that holds the actual name, with a max name length of 25.
*/
    char names[1000][25] = {'\0'};
    read_files(names[0]);
    printf("%s %s", names[0], names[1]);
}
无效读取文件(字符*名称){ char newName1[4]=“玛丽”; char newName2[4]=“安娜”; 对于(int i=0;i<5;i++){ 名称[i]=newName1[i]; } 整数偏移=25; 对于(int i=0;i<5;i++){ 名称[i+偏移量]=newName2[i]; } } void main(){ /* 这是正在传递的值。第一个维度的大小为1000, 第二个维度是一个 包含实际名称的数组,最大名称长度为25。 */ 字符名[1000][25]={'\0'}; 读取_文件(名称[0]); printf(“%s%s”,名称[0],名称[1]); }

在内存中,2d数组仍然是具有奇特寻址的1d块。因此,您可以有一个偏移量变量,只需将其添加到每个名称上,就像我在这里所做的那样

您必须将
读取文件
定义为:

void read_files(char (*names)[25]) {
    char newName1[5] = "mary";
    char newName2[5] = "anna";
    for(int i = 0; i < 5; i++){
        names[0][i] = newName1[i];
    }
    for(int i = 0; i < 5; i++){
        names[1][i] = newName2[i];
    }   
}
使用以下命令:

strcpy(names[0], newName1);
strncpy
方式:

strncpy(names[0], newName1, sizeof names[0]);
names[0][sizeof(names[0]) - 1] = 0; // making sure to add the \0 byte
还要记住,
main
函数的正确定义可以是 其中只有一项:

  • int main(无效)
  • intmain(intargc,char**argv)
  • intmain(intargc,char*argv[])

将名称复制到
名称[x]
时,只需使用
strncpy
(假设名称以空结尾)。您不必逐字符复制if。
void read_文件(char**names,int size)
,使用char**表示指向char指针的指针,并将
大小传递为25@chux我错过了,我修正了我的答案我想你是指元素。我希望上帝不要在五分钟内宣布dimensions@Mitchel0022我指的是元素,但声明一个5维数组。。。那太棒了。关于strcpy和strncpy的好信息。就比较而言,一个比另一个好吗?因为另一个步骤是在将名称复制到名称数组之前,我需要确保它不存在于其他元素中。@TannerDanger strcpy将复制整个字符串,strncpy将只复制n个字节。一个并不比另一个好,它们只是用于不同的事情>“在内存中,2d数组仍然是具有奇特寻址的1d块。”好消息,我完全忘记了这一点。这对本作业的另一部分很有帮助,谢谢。
strcpy(names[0], newName1);
strncpy(names[0], newName1, sizeof names[0]);
names[0][sizeof(names[0]) - 1] = 0; // making sure to add the \0 byte