char *p赋值写入
时间: 2023-07-11 07:45:51 浏览: 88
在 C++ 中,可以使用指针来操作字符串,其中 `char*` 类型的指针可以指向一个字符串的首地址。如果需要将一个字符串赋值给 `char*` 指针,可以使用不同的方式,下面分别介绍两种常见的方法:
1. 使用字符串字面值初始化指针
可以使用字符串字面值来初始化 `char*` 类型的指针,例如:
```c++
char *p = "Hello, world!"; // 使用字符串字面值初始化指针
```
这种方式会将字符串字面值的首地址赋值给指针 `p`,指针 `p` 指向的字符串是一个常量字符串,其内容不可修改。
2. 使用动态内存分配来存储字符串
可以使用 `new` 运算符来动态分配内存,将一个字符串存储在堆上,并将其地址赋值给 `char*` 指针,例如:
```c++
char *p = new char[20]; // 动态分配 20 字节的内存
strcpy(p, "Hello, world!"); // 将字符串赋值给指针指向的内存空间
```
这种方式会在堆上分配一段内存空间,大小为 20 字节,并将其首地址赋值给指针 `p`。之后使用 `strcpy` 函数将字符串 "Hello, world!" 写入到指针 `p` 指向的内存空间中。
需要注意的是,在使用动态内存分配时,需要手动释放内存空间,以避免内存泄漏。可以使用 `delete` 运算符来释放内存,例如:
```c++
delete[] p; // 释放指针指向的内存空间
```
以上是两种常见的将字符串写入 `char*` 指针的方法,具体的使用方式可以根据实际情况选择。
相关问题
char *[] 动态赋值
你可以使用动态内存分配来为char *[]数组动态赋值。下面是一个示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char *strings[3];
int i;
for (i = 0; i < 3; i++) {
// 分配内存并将其赋值给字符串指针数组
strings[i] = malloc(sizeof(char) * 20);
sprintf(strings[i], "string %d", i+1);
}
for (i = 0; i < 3; i++) {
printf("%s\n", strings[i]);
// 释放内存
free(strings[i]);
}
return 0;
}
```
在此示例中,我们首先定义了一个大小为3的char *[]数组。然后,我们使用for循环对数组进行动态赋值。在每次迭代中,我们使用malloc函数分配内存,然后使用sprintf函数将字符串写入到分配的内存中。最后,我们循环输出字符串并使用free函数释放分配的内存。
std::stringstream 转char *
可以使用 `std::stringstream` 对象的 `str()` 方法获取其内部的字符串,然后使用 `c_str()` 方法将其转换为 `const char*` 类型的指针,最终可以再将其转换为 `char*` 类型的指针,例如:
```cpp
#include <iostream>
#include <sstream>
int main() {
std::stringstream ss;
ss << "Hello, world!";
std::string str = ss.str();
char* cstr = new char[str.length() + 1];
std::strcpy(cstr, str.c_str());
std::cout << cstr << std::endl;
delete[] cstr;
return 0;
}
```
在上面的示例代码中,首先使用 `std::stringstream` 对象 `ss` 向其中写入了一个字符串 "Hello, world!",然后通过 `str()` 方法获取其内部存储的字符串并赋值给 `std::string` 对象 `str`。接着,使用 `new` 运算符在堆上分配了一块内存,其大小为 `str.length() + 1`,并将指向该内存的指针赋值给 `char*` 类型的指针 `cstr`。最后,使用 `std::strcpy()` 函数将 `str.c_str()` 返回的 `const char*` 类型的指针指向的字符串复制到 `cstr` 指向的内存中,并使用 `std::cout` 输出 `cstr` 指向的字符串。最后,使用 `delete[]` 运算符释放了 `cstr` 指向的内存。