c语言二维字符数组传入函数的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言二维字符数组传入函数的问题相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<string.h>
int find(char (*str)[1000000],int j,int l,char c)

int n=0;
int i=0;
for(i=0;i<l;i++)

if(str[j][i]==c)

n++;


return n;

int main()

char a[50][1000000];
int lenth;
int s[5]=0;
int i;
int j;
int temp;
int sum[100];
int k=0;
char c='\n';

while(gets(a[i++]) !=NULL);
for(j=0;j<i-1;j++)

for(k=0;k<5;k++)

s[k]=0;

for(k=0;k<strlen(a[j]);k++)

s[0]=find(a[j],j,lenth,'C');
s[1]=find(a[j],j,lenth,'T');
s[2]=find(a[j],j,lenth,'H');
s[3]=find(a[j],j,lenth,'J');
s[4]=find(a[j],j,lenth,'S');

for(i=0;i<4;i++)

for(j=i+1;j<5;j++)

if(s[i]<s[j])

temp=s[i];
s[i]=s[j];
s[j]=temp;



sum[k++]=s[0]+s[1];

for(i=0;i<k;i++)

printf("%d\n",sum[i]);

return 0;


这段程序是统计每行CTHJS里出现次数最多和第二多的字符的次数和,我的问题出现在函数传参问题,我想把二位字符数组的一行传入函数,然后用函数在这一行统计各个字符的个数,但是我传函数传不进去,,应该怎么改呢

既然只传一行,干嘛要用(*)[]型形参?用char *p或char p[]不就足够了?另外,50x1000000的数组大了点,声明全局数组吧,局部数组不支持。 参考技术A 你数组第二维太大了,设小就可以了

C中的二维字符数组初始化

【中文标题】C中的二维字符数组初始化【英文标题】:2D character array initialization in C 【发布时间】:2011-09-29 19:01:54 【问题描述】:

我正在尝试构建一个字符串列表,我需要将这些字符串传递给期望 char ** 的函数

如何构建这个数组?我想传入两个选项,每个选项少于 100 个字符。

char **options[2][100];

options[0][0] = 'test1';
options[1][0] = 'test2';

这不会编译。我到底在做什么错?如何在 C 中创建二维字符数组?

【问题讨论】:

char **options[2][100] 是一个数组 [2][100] 指向字符指针的指针。 【参考方案1】:

C 字符串用双引号括起来:

const char *options[2][100];

options[0][0] = "test1";
options[1][0] = "test2";

重新阅读你的问题和 cmets 虽然我猜你真正想要做的是:

const char *options[2] =  "test1", "test2" ;

【讨论】:

这与 larsmans 的回答相同。但是,似乎我的函数仍在抱怨我没有通过 char** 编辑您的问题,使其包含您尝试将此数组传递给的函数。 如果我想为上面的二维数组动态分配内存。我怎样才能做到这一点..? @PaulR char (*str)[5] = malloc(sizeof(*str)*2); str[0][1] = "abcd";我是这样做的。但是编译器会抛出一个错误。!!!!!! @PaulR @ranaarjun:您应该发布一个新问题,详细描述您的问题【参考方案2】:
char **options[2][100];

声明一个大小为 100 的指针数组的大小为 2 的数组,这些指针指向指向 char 的指针。您需要删除一个*。您还需要将字符串文字放在双引号中。

【讨论】:

在传递给寻找 char** 的函数时,我是否需要取消引用这个或其他东西?现在它抱怨 char*[2][100] 不是一个有效的论点 @Derek: 你不能将options 传递给这样的函数,但是你可以在0,1 中将options[i] 传递给i【参考方案3】:

我认为您最初的意思是创建一个仅包含字符而不是指针的数组:

char options[2][100];

options[0][0]='t';
options[0][1]='e';
options[0][2]='s';
options[0][3]='t';
options[0][4]='1';
options[0][5]='\0';  /* NUL termination of C string */

/* A standard C library function which copies strings. */
strcpy(options[1], "test2");

上面的代码显示了两种不同的方法来设置您为包含字符而预留的内存中的字符值。

【讨论】:

这也可以,因为一切都是文字:char options[2][100] = "test1", "test2";【参考方案4】:

如何创建包含字符指针的大小为 5 的数组:

char *array_of_pointers[ 5 ];        //array size 5 containing pointers to char
char m = 'm';                        //character value holding the value 'm'
array_of_pointers[0] = &m;           //assign m ptr into the array position 0.
printf("%c", *array_of_pointers[0]); //get the value of the pointer to m

如何创建指向字符数组的指针:

char (*pointer_to_array)[ 5 ];        //A pointer to an array containing 5 chars
char m = 'm';                         //character value holding the value 'm'
*pointer_to_array[0] = m;             //dereference array and put m in position 0
printf("%c", (*pointer_to_array)[0]); //dereference array and get position 0

如何创建一个包含字符指针的二维数组:

char *array_of_pointers[5][2];          
//An array size 5 containing arrays size 2 containing pointers to char

char m = 'm';                           
//character value holding the value 'm'

array_of_pointers[4][1] = &m;           
//Get position 4 of array, then get position 1, then put m ptr in there.

printf("%c", *array_of_pointers[4][1]); 
//Get position 4 of array, then get position 1 and dereference it.

如何创建指向二维字符数组的指针:

char (*pointer_to_array)[5][2];
//A pointer to an array size 5 each containing arrays size 2 which hold chars

char m = 'm';                            
//character value holding the value 'm'

(*pointer_to_array)[4][1] = m;           
//dereference array, Get position 4, get position 1, put m there.

printf("%c", (*pointer_to_array)[4][1]); 
//dereference array, Get position 4, get position 1

为了帮助您了解人类应该如何阅读复杂的 C/C++ 声明,请阅读以下内容:http://www.programmerinterview.com/index.php/c-cplusplus/c-declarations/

【讨论】:

以上是关于c语言二维字符数组传入函数的问题的主要内容,如果未能解决你的问题,请参考以下文章

C-二维数组, 字符串, 指针

C语言中如何将二维字符数组作为函数参数引用传递

C中的二维字符数组初始化

C 语言二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )

传入一个数组和2个字符串 以及后台如何接收

C语言如何定义指针指向字符型二维数组