在a.c
中char write[500][255];
void func1()
{
int i=0;
while(i<100)
{
char text[255];
sprintf(text, "abcdefgh %d - %d - %d", i, i*2, i*3);
strcpy(write[i],text);
i++;
}
func2(&write);
}
in b.c
void func2(char *write)
{
int i=0;
while(i<100)
{
printf("%d --> %s", i, &write[i]);
i++;
}
}
结果是:
abcdefgh 0 - 0 - 0
bcdefgh 0 - 0 - 0
cdefgh 0 - 0 - 0
defgh 0 - 0 - 0
efgh 0 - 0 - 0
fgh 0 - 0 - 0
gh 0 - 0 - 0
...
我也会收到func2(&write);
passing argument 1 of 'func2' from incompatible pointer
我不明白为什么结果是这样的。我怎么能摆脱这个警告。 我无法获得write []数组的值。我怎么能这样做?
由于
工作代码在这里:http://ideone.com/HTyZwH
答案 0 :(得分:0)
您应该将func2
的签名更改为:
void func2(char write[][255])
请注意,我不相信为func2
发布的代码实际上是在生成输出。鉴于这一行:
printf("%d --> %s", i, write[i]);
假设编译器通过了将2维char
数组转换为char*
的事实,在格式字符串中指定%s
应该导致printf
对待存储在write[i]
的字符作为指向字符串的指针并调用未定义的行为。可能是崩溃。
如果该行代替:
printf("%d --> %s", i, &write[i]);
然后我可以看到你显示的输出产生了。