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