char buf[4]={'O' ,'k' }; buf[2] = '';
时间: 2023-09-24 17:10:52 浏览: 60
在第三个字符赋值的时候,你使用了一个空的字符字面量,但是空的字符字面量是无效的,因为在C语言中字符数组的长度是固定的,所以不能通过空字符来表示空间。如果你想将第三个字符赋值为空字符,应该使用 '\0' 表示。正确的代码应该是:
```c
char buf[4] = {'O', 'k'};
buf[2] = '\0';
```
这样就可以在第三个位置插入一个空字符,使得该数组可以被当做一个字符串使用。
相关问题
char **p=buf;
在C/C++中,`char **p=buf;` 是一种指针初始化,它试图将指向字符数组(如 `const char* buf`)的指针赋给一个指向指针的指针(即二级指针)。然而,这通常是不允许的,因为`buf` 是一个常量指针,而`char **` 指向的是可以修改的指针变量。
引用[2]提到,当你尝试用 `const char*` 类型的指针赋值给 `char **` 类型的指针时,会发出警告,因为它们有不同的兼容性。`const char *` 表示指针本身不可变,但所指向的内容可以改变;而 `char **` 可以用来改变所指向的地址。
正确的做法可能是这样:
```c
// 如果buf是一个非常量的字符指针
char *buf = "hello world";
char **p = &buf; // 将buf的地址赋给p
// 或者如果你知道buf是一个常量字符串,但允许修改指针,
// 注意在这种情况下,通常不推荐这样做,因为可能引发未定义行为
const char *buf = "hello world";
char **p = (char **)(&buf); // 虽然编译器可能会接受,但这并不安全
```
char* buf = new char[iSize + 1]什么意思
这段代码是在C++中动态分配了一个大小为iSize+1的字符数组,并将其指针赋值给了指针变量buf。
具体来说,new关键字在C++中用于动态分配内存,char表示分配的内存块的类型为字符型,iSize + 1表示需要分配的内存块的大小为iSize加上一个字符的大小(因为字符串以'\0'结尾),加号表示求和。最后,将返回的指针强制转换为char*类型,并赋值给指针变量buf。
阅读全文