【发布时间】:2013-12-23 14:57:13
【问题描述】:
我知道 "Ali" 是 4 个字符的 char 数组:'A' 'l' 'i' NULL
我想知道的是它的返回值。
例如 strcpy 需要两个指针作为输入。为什么下面的代码有效:
char mstr[10]={};
strcpy(mstr,"Working...");
但这不是:
char *names[5]={"Ali","Reza","Hassan","Ahmad","Mohammad"};
“Ali”是不是指向'A'字符的指针?!
问题已解决!!! (我不明白为什么?!我只是添加一些东西来打印它们!):
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main()
{
char mstr[10]={};
strcpy(mstr,"Working...");
char *names[5]={"Ali","Reza","Hassan","Ahmad","Mohammad"};
int i;
//print :
for(i=0;i<5;i++)
{
puts(names[i]);
}
getch();
return 0;
}
我想我知道这里发生了什么。我的第二个代码在 C 语言中完全正确。我将它编译为 c++ 文件(它是一个 cpp 文件)
顺便说一句,错误是:[错误] 从 'char' 到 'const char*' 的无效转换 [-fpermissive]
C++ 有不同的规则,默认情况下它定义了 5 个 const char 数组而不是 char 数组。
我认为这就是答案。
【问题讨论】:
-
“不工作”是什么意思?那应该编译得很好。
-
不,它根本不工作...... [错误] 从 'char' 到 'const char*' 的无效转换 [-fpermissive]
-
这里编译得很好:ideone.com/5mGMLH。请发帖minimal test-case。
-
再次,请发布您正在使用的确切代码。另外,请发布有关您的编译器版本以及如何调用它的详细信息。
-
关于
"Ali"是指向'A'的指针的查询 - 这取决于上下文。"Ali"本身是一个足以容纳四个元素的字符数组的文字声明,前三个初始化为'A', 'l', 'i',最后一个字符集为 NUL(注意:NUL,而不是 NULL)。如果在函数调用中使用此字面量,其中需要char *(例如strcpy(name, "Ali");),则编译器遵循以下规则:在预期指针的位置使用字面量数组声明会导致指向数组第一个元素的指针为传递给函数。