c - 我无法在 C 中获取 char 数组的值

标签 c char arrays

交流

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); 
}

在公元前

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
定义 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

最佳答案

您应该更改 func2 的签名至:

void func2(char write[][255])

请注意,我不相信为 func2 发布的代码实际上正在产生输出。鉴于这一行:

printf("%d --> %s", i, write[i]);

假设编译器通过了您正在转换二维 char 的事实数组到 char* ,指定 %s格式字符串中应导致 printf处理存储在 write[i] 的字符作为指向字符串的指针并调用未定义的行为。可能是崩溃。

如果该行是:

printf("%d --> %s", i, &write[i]);

然后我可以看到您所显示的输出正在生成。

关于c - 我无法在 C 中获取 char 数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18744869/

相关文章:

c - 如何将一个或多个变量传递给新创建的线程?

java - 如何将具有特殊字符的字符串转换为转义的另一个字符串

PHP如何在变量中拆分数组

arrays - 在 VBA 函数中从范围切换到数组并返回

c - 尝试了解 C 中多维动态字段的用法

c - 为什么 gtk 窗口挂起?

c++ - 协调类、继承和 C 回调

c - Beaglebone 中的数字输入端口 (GPIO) 流式传输?

java - 将原语转换为自定义类

c++ - 将 std::string 转换为 char * 时,SIGSEGV 仅在我的应用程序的某些部分崩溃