我试图将一个字符串数组(C样式字符串)传递给一个函数.但是,我不希望在函数的每个字符串的长度上放置最大大小,也不想动态分配数组.这是我先写的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(char *s[])
{
printf("Entering Fun\n");
printf("s[1]=%s\n",(char *)s[1]);
}
int main(void)
{
char myStrings[2][12];
strcpy(myStrings[0],"7/2/2010");
strcpy(myStrings[1],"hello");
fun(myStrings);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
我在运行时遇到了一个seg错误,并且编译器发出以下警告:stackov.c:在函数'main'中:stackov.c:17:警告:从不兼容的指针类型stackov.c传递'fun'的参数1:5:注意:预期'char**'但参数类型为'char(*)[12]'
但是,当我将main()更改为以下内容时,它可以正常工作:
int main(void)
{
char myStrings[2][12];
char *newStrings[2];
strcpy(myStrings[0],"7/2/2010");
strcpy(myStrings[1],"hello");
newStrings[0]=myStrings[0];
newStrings[1]=myStrings[1];
fun(newStrings);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
当数组传递给函数时,数组[2] [12]是否与字符指针数组相同?
我正在编写一个使用套接字的API.在API中,我为各种项目分配内存.我想确保关闭套接字并释放内存以防有诸如Ctrl-C之类的信号.在研究这个时,似乎free()不在安全功能列表(man 7信号)上,因此,我无法释放信号处理程序内的内存.我可以关闭套接字就好了.有没有想过如何释放记忆?提前谢谢您的时间.