-1

我有一个关于将 c 字符串传递给函数的问题。

如果我有一个功能:

void reverse(char* c){
   //here is the reverse code
}

主要是:

int main(){
   char* c1="abcd";
   char c2[5]="abcd";
   char * c3=new char[5];
   c3="abcd";
}

在我的测试中,只有 c1 不允许传入函数,其他两个工作正常。我想知道为什么 c1 是错误的用法?非常感谢!

4

2 回答 2

5

您的代码是 C++,而不是 C;new char[5]是 C 中的语法错误。

C 和 C++ 是两种不同的语言。在 C++ 中,字符串文字是const,并且将字符串文字传递给接受char*参数的函数是错误的。您应该从您的 C++ 编译器中收到一条错误消息(您没有费心向我们展示)。

(如果您使用的是 C 编译器,它会接受类似 的调用reverse("foo"),但它会抱怨new char[5].)

于 2013-05-23T17:13:57.960 回答
1

c1将指向一个字符串文字并尝试修改字符串文字是未定义的行为,这是基于reverse将尝试将字符串反转到位的假设。

于 2013-05-23T17:08:11.803 回答