【发布时间】:2013-03-11 11:58:14
【问题描述】:
我开始学习 C 并且我对 c 字符串指针有点困惑。
int argc = 0;
const char *str[] = { "hello" , NULL, NULL };
str[argc++] = "nice!";
str[argc++] = "abc";
str[argc++] = "def"
send_args(argc, str);
//the prototype/header : int send_args(int argc, const char **args);
因为 send_args 函数不会修改传递的 str 的值,这些操作是否有效? 因为我不想做类似的事情:
int i, argc = 0;
char *str[3];
str[argc++] = strdup("nice!");
str[argc++] = strdup("abc");
str[argc++] = strduo("def)"
send_args(argc, str);
for (i = 0; i< argc; i++)
if (str[i]) { free(str[i]); str[i]=NULL; }
提前谢谢各位。
【问题讨论】:
-
你打算用
send_args()做什么?我不确定您的数组是否已正确初始化并且可以保存所有值。我认为编译器可能会优化最后两个NULL并且您可能会写入未引用的内存。 -
不,编译器无法优化数组元素正是因为这个原因:数组的大小是程序数据的相关部分。