c语⾔给char数组包含参数,将char数组作为函数参数传递给C
语⾔(passingcha。。。
将char作为函数参数传递给C语⾔(passing char array as function parameters in C)
我想将arr2复制到arr并将arr作为函数
void func(char * array)
{}
int main(void)
{undefined
int a;
char arr[6][50];
char arr2[][50]={"qweeeaa","bbbb","ffaa","eeaa","aaaa","ffaa"};
for(a=0; a<6;a++)
{undefined
strcpy(arr[a], arr2[a]);
}
func(arr);
return 0;
}
但我不能将arr作为函数参数传递。 我明⽩了
[Warning] passing argument 1 of 'func' from incompatible pointer type [enabled by default]
[Note] expected 'char *' but argument is of type 'char (*)[50]'
我正在使⽤MinGW GCC 4.8.1
I want to copy arr2 to arr and pass arr as a function paramater
void func(char * array)
{}
int main(void)
{undefined
int a;
char arr[6][50];
char arr2[][50]={"qweeeaa","bbbb","ffaa","eeaa","aaaa","ffaa"};
for(a=0; a<6;a++)
{undefined
strcpy(arr[a], arr2[a]);
}
func(arr);
return 0;
}
But I can not pass arr as a function parameter. I get
[Warning] passing argument 1 of 'func' from incompatible pointer type [enabled by default]
[Note] expected 'char *' but argument is of type 'char (*)[50]'
I am using MinGW GCC 4.8.1
2020-02-23 21:30
满意答案
传递的类型和函数期望的类型不匹配。 更改函数以接收指向数组的指针:
void func(char (*array)[50])
{undefined
}
其他问题:
1)你还没有声明func()的原型。 在C99之前的模式下,编译器会假设函数返回⼀个int ,这会导致问题。 在C99和C11中,缺少原型会使您的代码⽆效。 因此要么将原型声明在源⽂件的顶部,要么将函数移到main()之上。
2)包含适当的标题( ⽤于printf等)。
The type you pass and the type the function expects do not match. Change the function to receive a pointer to an array:
void func(char (*array)[50])
{undefined
}
Other problems:
1) You haven't declared a prototype for func() either. In pre-C99 mode, compiler would assume the function returns an int and this would cause problem. In C99 and C11, missing prototype makes your code invalid. So either declare the prototype at the top of the source file or move the function above main().
2) Include appropriate headers ( for printf etc).
2015-07-08
相关问答
int get_args_broken(int argc, char **argv, char *string)
{undefined
string = get_string(argc, argv);
printf("in get_args_broken %p string %s\n",string,string);
}
你只是修改string本地(⾃动)变量。 这对调⽤者来说是不可见的。 请注意,这意味着你正在释放⼀个主指针。 出于同样的原因,这是错误的: int get_sum(int sum, in...
你的功能应该是: void putAddress(char *,char *,char *,char *);
Your function should be: void putAddress(char *,char *,char *,char *);
在C中不可能按值传递数组。 您列出的每个⼯作解决⽅案(不幸的是排除了#2)不仅会让您,⽽且会强制您修改原始数组。 由于参数衰减,foo(char* s)和foo(char s[])完全相同。 在这两种情况下,您都使⽤其名称传递数组: char array[4];
foo(array); // regardless of whether foo accepts a char* or a char[]
在这两种情况下,数组都被转换为指向其第⼀个元素的指针。 指针到阵列的解决⽅案不太常见。 它需要以...
您的新代码显⽰您正在写⼊⽆效内存。 set是⼀个指针,但你永远不会初始化它。 你正在覆盖⼀些随机存储器,从⽽破坏你传递给fopen()的字符串的指针。 Your new code shows that you are writing to invalid memory. set is a pointer but you never initialize it.
You're overwriting some random memory and thereby destroying
你可以投它: libraryFunc( (const char **) stringArray);
或者,最好只更改数组的声明: char *string1 = "myString";
char *string2 = "myString2";
const char *stringArray[2] = { string1, string2 };
libraryFunc(stringArray);
你不能隐式地将char **转换为const char **因为它只能在间接的第⼀级⼯作(注意在上⾯...
c语言char的用法将参数传递给函数时,它通常按值传递,这意味着它的值被复制。 如果你想改变它,你必须通过引⽤传递它。 对于指针也是如此,如果你想更改指针,那么你也需要通过引⽤传递它: void change_array(const char*& target) { ... }
When you pass an argument to a function, it's normally passed by value, meaning its value is copied. If you want
意味着我的数组中的所有字符串都会更改为⽤户的新输⼊。 这可能是因为,您有⼀个command引⽤updateHistory函数内部的单个变量。因此,⽆论何时在updateHistory函数的第⼀⾏进⾏赋值,指针数组中的所有指针都指向相同的内存位置 - command 。 要解决此问题,您需要像这样分配指针数组(例如,您可以在函数外部执⾏此操作): char *history[10];
for ( i=0; i < 10; i++ )
{undefined
history[i] =
传递的类型和函数期望的类型不匹配。 更改函数以接收指向数组的指针: void func(char (*array)[50])
{undefined
}
其他问题: 1)你还没有声明func()的原型。 在C99之前的模式下,编译器会假设函数返回⼀个int ,这会导致问题。 在C99和C11中,缺少原型会使您的代码⽆效。 因此要么将原型声明在源⽂件的顶部,要么将函数移到main()之上。 2)包含适当的标题( ⽤于printf等)。 The type you pass and the type ...
我假设你将数组的地址传递给function() 。 问题是[]运算符的优先级⾼于*运算符。 正确的代码将是。 printf("in: %c %c\n", (*in)[0], (*in)[1]);
⾸先,您取消引⽤以获取原始数组,然后获取该数组的元素。 I'm assuming you are passing addresses of arrays to you function(). The problem is that [] operator has a higher precedence ...
const_cast(whatever)
在这种情况下是const_cast的正确⽅法。 const_cast(whatever)
is the correct way to const_cast in this case.
相关⽂章
以下是代码: #include<iostream>using namespace std
...
static char array)返回出现在数组最⼩值
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \
...
static CharMatcher noneOf(CharSequence sequence)返回⼀
...
1.请问下⾯程序有什么错误? int a[60][250][1000],i,j,k;
...
30分 #include "stdio.h"#define u32 unsign
...
指针数组的定义 如果数组的元素都是指针类型,那么我们就把这种叫做指针数组。指针数组是如下定义的:
...
今天尝试⽤C语⾔在Hadoop上编写统计单词的程序,具体过程如下: ⼀、编写map和reduce程序
...
...
1.不能做switch()的参数类型是: switch的参数不能为实型。(只能是int char)
...
最新问答
如果启⽤了复制处理程序,请确保将其置于其中⼀个安全⾓⾊之后。 我见过⼈们做的另⼀件事是在不同的端⼝上运⾏admin。 最好在需要auth的页⾯上使⽤SSL,这样你就不会发送明确的密码,因此管理和复制将发⽣在8443上,⽽常规查询将在8080上发⽣。 如果您要签署⾃⼰的证书,请查看此有⽤的SO页⾯: 如何在特定连接上使⽤不同的证书? I didn't know that /admin was the context for SOLR admin because /admin does not re
第⼀:在您的样本中,您有: 但是你在询问 //td[@class=‘CarMiniProfile-TableHeader’] (注意TableHeader中的⼤写'T')。 xpath 区分⼤⼩写。 第⼆:通过查询// td [@ class ='CarMiniProfile-Table
Header'] / td,你暗⽰你在外部td中有⼀个'td'元素,⽽它们是兄弟妹。 有很多⽅法可以在这⾥获得制作和模型
问题是,在启⽤Outlook库引⽤的情况下, olMailItem是⼀个保留常量,我认为当您将Dim olMailItem as Outlook.MailItem ,这不是问题,但是尝试设置变量会导致问题。 以下是完整的解释: 您已将olMailItem声明为对象变量。 在赋值语句的右侧,在将其值设置为对象的实例之前,您将引⽤此Object 。 这基本上是⼀个递归错误,因为你有对象试图⾃⼰分配⾃⼰。 还有另⼀个潜在的错误,如果之前已经分配了olMailItem ,这个语句会引发另⼀个错误(可能是
你的代码适合我: class apples { public static void main(String args[]) { System.out.println("Hello World!"); } } 我将它下载到c:\ temp \ apples.java。 以下是我编译和运⾏的⽅式: C:\temp>javac -cp . apples.java C:\temp>dir apples Volume in drive C is
HP_PAV
这将取决于你想要的。 对象有两种属性:类属性和实例属性。 类属性 类属性对于类的每个实例都是相同的对象。 class MyClass:
class_attribute = [] 这⾥已经为类定义了MyClass.class_attribute ,您可以使⽤它。 如果您创建MyCla
ss实例,则每个实例都可以访问相同的class_attribute 。 实例属性 instance属性仅在创建实例时可⽤,并且对于类的每个实例都是唯⼀的。 您只能在实例上使⽤它们。在⽅法__init__中定
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论