Tag: 参数

char str 和char * str作为函数参数有什么区别?

假设我们有以下函数原型: void function1(char str[]); void function2(char *str); 现在说我们有一个字符串char name[] = “John”; 我们希望通过这些function。 两者有什么区别? 它们的用途和局限是什么? 是否存在一种优先于另一种情况的情况? 如果将字符串初始化为char *name = “John”它会有所作为吗? 我理解在函数中使用char str[]和char *str之间的区别,但我不知道它们作为函数参数或参数的行为。

使用execve时传递整数参数

我是使用C语言系统调用编程的初学者。我试图在我的一个程序中使用execve调用。 我必须将一个整数作为参数传递给通过execve调用的程序。 但是,在互联网上阅读并查看示例代码,我可以看到我们只能将字符串作为参数传递。 所以,我尝试使用’sprintf’将整数转换为字符串,然后使用’strcpy’将该字符串复制到必须通过execve传递的字符串数组的一个元素中。 但是使用strcpy会导致分段错误。 我通过调试检查了这一点,如果我不使用strcpy但只是写一些像 – myargv [1] =“123”; 然后整个程序工作正常。 但由于我必须传递一个变量整数作为参数而不是常量,我不能使用上面的方法。 这个问题一直困扰着我。 请帮助我解决我应该做的事情。

将数组作为参数传递给C语言

我(我想)我知道如果在堆栈的编译时声明它,你只能检索一个数组的大小(使用sizeof),例如 int my_array[] = {1,2,3}; sizeof(my_array) == 3; 一旦开始使用指针,就会丢失此长度信息。 例如,如果将指向int的指针作为函数参数传递以将int数组转换为函数,则不能再以这种方式使用sizeof() ,它将只返回用于存储指针的字节数。 显然,了解arrays的长度至关重要。 因此,在传递数组时,我应该使用以下哪个选项? 传递指针和附带的长度参数 int my_func(int *my_array, size_t len_my_array) 创建我自己的矢量结构 struct vector { int *my_array; size_t len; } int my_func(struct vector *my_vector) 使用别人的矢量实现。 (是否存在C的默认实现,因为有C ++?) 我错过了另一种方法吗? (我目前正在使用第一个选项,但它有点笨拙,我很想知道这是否被认为是糟糕的编程习惯)

使用唯一结构作为参数C的pthread

我有这段代码给我带来了麻烦。 我知道所有的线程都在读取相同的结构。 但我不知道如何解决这个问题。 #include #include #include typedef struct { int a,b; } s_param; void * threadfunc(void *parm) { s_param *param2 = parm; printf(“ID:%d and v:%d\n”,param2->a,param2->b); pthread_exit(NULL); } int main(int argc, char **argv) { pthread_t thread[3]; int rc=0,i; void * status; for(i=0; i<3 ; ++i){ s_param param; param.b=10; param.a=i; rc = pthread_create(&thread[i], NULL, threadfunc, &param ); […]

将3D数组作为参数传递给C中的函数

我试图编写一个对3d数组的元素求和的函数,但是它一直说我将3d数组作为参数传递的行存在问题。 我的代码如下: #include int sum3darray(a[][][], size); main() { int check[3][3][3]={ 0 }; int size=3; printf(“The sum is %d\n”,sum3darray(check,size)); } int sum3darray(a[][][],size) { int i,j,k,sum=0; for(i=0;i<size;i++) { for(j=0;j<size;j++) { for(k=0;k<size;k++) { printf("i=%d, j=%d,k=%d, checkijk=%d ",i,j,k,check[i][j][k]); sum+=check[i][j][k]; printf("sum=%d\n", sum); } } } return(sum); } 编译器将第3行和第11行标记为问题。 有人可以帮忙吗?

va_arg(,double)每次返回无效值

当我使用va_arg(ap,double)运行这个示例程序时,我发现va_arg返回无效数据,为0而不是3或1.2而不是1,这样如果我传递没有.00而不是double格式的整数值就会得到一个垃圾数据(即3而不是3.00)! #include #include void func(int s){ printf(“%s: %d\n”,__func__,s); } void var(int count,…){ va_list ap; va_start(ap,count); double a = va_arg(ap,double); printf(“%f\n”,a); va_end(ap); } void main(void ) { printf(“%s,%d,%s\n”,__FILE__,__LINE__,__DATE__); func(__LINE__); var(1,3); var(1,1.2); var(1,1); } 输出是: try.c,24,Sep 25 2012 func: 25 0.000000 1.200000 1.200000

宏调用函数

我需要一个宏(或一个函数,但最好是一个宏),它接受一个函数名和无限数量的参数,然后将参数传递给函数。 我们假设这个宏是MACROFOO 。 #define MACROFOO(function, …) /* what do I put here?? */ int foo_bar(int x, int y) { // do stuff } int main(void) { int x = 3; int y = 5; MACROFOO(foo_bar, x, y); // calls foo_bar(x, y) } 我怎么能定义这样一个宏? 我想做的事情如下: #define MACROFOO(function, args…) (function)(args) 但看起来它传递给函数,而不是实际的参数。 我该怎么办?

C中的函数参数

我对C完全是新手。这是一个问题: 写这个function fzero(double f(double),double x1, double x2) 正如我们在课堂上所做的那样,用它来找到所有的解决方案 sin( pi*x / (1+x^2) ) = 0.25. 现在,我不希望你解决这个问题。 我错过了这个讲座,只想了解其意义 double f(double);

如何在scandir中参数化select函数

scandir()函数扫描目录dir,在每个目录条目上调用select()为“int(* filter)(const struct dirent *)”如何将模式值作为参数传递给fnmatch(const char * pattern,const char * string,int flags)filter中使用的函数? 这是我的示例代码 int my_selectgrf(const struct dirent *namelist) { int r = 0; char my_pattern[] = “*.grf”; r = fnmatch(my_pattern, namelist->d_name, FNM_PERIOD); return (r==0)?1:0; } scandir(“/pub/data/grf”, &namelist, my_selectgrf, alphasort); 我的目标是能够使用my_pattern作为输入参数。

argp和getopt有什么区别?

我认为标题是自我解释的。 我正在制作一个节目,我想知道我应该使用哪两个以及为什么。