const char*和char*区别
时间: 2023-09-02 08:11:48 浏览: 148
const char* 和 char* 的区别在于 const 关键字的存在。const char* 声明的变量是指向常量字符的指针,它所指向的字符是不可修改的。而 char* 声明的变量是指向字符的指针,它所指向的字符是可以修改的。例如:
```
const char* str1 = "hello"; // str1 指向常量字符,不可修改
char* str2 = "world"; // str2 指向字符,可以修改
```
如果我们尝试修改 str1 所指向的字符,编译器会报错。而 str2 可以被修改,但是如果我们尝试修改其指向的字符,可能会导致程序运行错误。因此,在使用指针时,我们应该根据实际情况选择合适的声明方式。
相关问题
note: expected ‘const char *’ but argument is of type ‘char’ char *mystrstr(const char* s1,const char* s2)
这个错误是因为在`main`函数中,您将`char`类型的字符串传递给了`mystrstr`函数,而`mystrstr`函数期望接收的是`const char*`类型的字符串。
为了解决这个问题,您需要将`s2`和`s3`声明为`const char*`类型的指针,而不是`char`类型的数组。
请将以下代码:
```c
char s2[] = "helloworld";
char s3[] = "ow";
```
改为:
```c
const char* s2 = "helloworld";
const char* s3 = "ow";
```
这样就能够解决这个问题。修正后的代码如下:
```c
#include<stdio.h>
#include<string.h>
char *mystrstr(const char* s1, const char* s2)
{
int i = 0, a = 0, c = 0;
int d = strlen(s2);
while (s1[i] != '\0' && a <= d - 1)
{
c = i;
while (s1[i] == s2[a])
{
i++;
a++;
}
if (s2[a] == '\0')
{
return (char*)(s1 + c);
}
i = c;
i++;
}
return NULL;
}
int main()
{
const char* s2 = "helloworld";
const char* s3 = "ow";
printf("%s\n", mystrstr(s2, s3));
return 0;
}
```
现在代码应该能够正确编译和运行了。
class EncodingDefs { public: static const int RAW = 0; static const int COPYRECT = 1; static const int RRE = 2; static const int HEXTILE = 5; static const int TIGHT = 7; static const int ZRLE = 16; static const char *const SIG_RAW; static const char *const SIG_COPYRECT; static const char *const SIG_RRE; static const char *const SIG_HEXTILE; static const char *const SIG_TIGHT; static const char *const SIG_ZRLE; };
这是一个 C++ 类 EncodingDefs,它定义了一些常量和字符串常量,用于表示远程桌面协议中的编码类型。
其中,常量 RAW、COPYRECT、RRE、HEXTILE、TIGHT 和 ZRLE 分别表示编码类型的编号。这些常量的值是固定的,不能修改。
另外,类中还定义了一些字符串常量,包括 SIG_RAW、SIG_COPYRECT、SIG_RRE、SIG_HEXTILE、SIG_TIGHT 和 SIG_ZRLE。这些字符串常量是编码类型的名称,可以用于在日志或其他输出中表示编码类型的名称。这些字符串常量的值也是固定的,不能修改。
这个类的作用是提供一种便捷的方式来表示和访问远程桌面协议中的编码类型,使得代码更加易读和维护。
阅读全文