linux char* 转string
时间: 2023-12-22 14:03:23 浏览: 79
可以使用C++中的string类和const_cast来实现char*转string。具体代码如下:
```
char* c_str = "hello world";
string str = const_cast<char*>(c_str);
```
其中,c_str是要转换的char*类型变量,str是转换后的string类型变量。
另外,如果要将QString类型转换为char*类型,可以使用toStdString()函数将QString转换为标准字符串,再使用c_str()函数将标准字符串转换为char*类型。具体代码如下:
```
QString qstr = "hello world";
string stdstr = qstr.toStdString();
char* c_str = const_cast<char*>(stdstr.c_str());
```
相关问题
在Linux中用c语言实现:1. 写一个小程序,实现递归复制目录。 // copyDir.c void copyFile(const char* src, const char* dst); void copyDir(const char* src, const char* dst); int main(int argc, char* argv[]) { // ./copyDir src dst ARGS_CHECK(argc, 3); copyDir(argv[1], argv[2]); return 0; } void copyFile(const char* src, const char* dst) { // 复制文件 } void copyDir(const char* src, const char* dst) { // 创建dst目录 // 打开src目录 // 遍历目录流 while(...) { // 忽略.和.. // 如果该目录项是目录,则调用copyDir递归复制 // 如果该目录项是文件,则调用copyFile复制文件 } // 关闭目录流 }
这个问题要求你用C语言在Linux中实现一个递归复制目录的小程序。你可以参考下面的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <dirent.h>
void copyFile(const char* src, const char* dst);
void copyDir(const char* src, const char* dst);
int main(int argc, char* argv[]) {
if (argc != 3) {
fprintf(stderr, "Usage: %s src dst\n", argv[0]);
exit(1);
}
copyDir(argv[1], argv[2]);
return 0;
}
void copyFile(const char* src, const char* dst) {
char buf[BUFSIZ];
ssize_t size;
int src_fd, dst_fd;
src_fd = open(src, O_RDONLY);
if (src_fd < 0) {
perror("open");
exit(1);
}
dst_fd = open(dst, O_WRONLY | O_CREAT | O_TRUNC, 0644);
if (dst_fd < 0) {
perror("open");
exit(1);
}
while ((size = read(src_fd, buf, BUFSIZ)) > 0) {
if (write(dst_fd, buf, size) != size) {
perror("write");
exit(1);
}
}
if (size < 0) {
perror("read");
exit(1);
}
if (close(src_fd) < 0) {
perror("close");
exit(1);
}
if (close(dst_fd) < 0) {
perror("close");
exit(1);
}
}
void copyDir(const char* src, const char* dst) {
DIR* dir;
struct dirent* entry;
char src_path[BUFSIZ], dst_path[BUFSIZ];
struct stat statbuf;
if (mkdir(dst, 0755) < 0) {
perror("mkdir");
exit(1);
}
if ((dir = opendir(src)) == NULL) {
perror("opendir");
exit(1);
}
while ((entry = readdir(dir)) != NULL) {
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
continue;
}
snprintf(src_path, BUFSIZ, "%s/%s", src, entry->d_name);
snprintf(dst_path, BUFSIZ, "%s/%s", dst, entry->d_name);
if (lstat(src_path, &statbuf) < 0) {
perror("lstat");
exit(1);
}
if (S_ISDIR(statbuf.st_mode)) {
copyDir(src_path, dst_path);
} else if (S_ISREG(statbuf.st_mode)) {
copyFile(src_path, dst_path);
}
}
if (closedir(dir) < 0) {
perror("closedir");
exit(1);
}
}
```
在这个程序中,我们定义了两个函数:`copyFile`和`copyDir`,分别用于复制文件和目录。
`copyFile`函数的实现比较简单,它使用`open`和`read`系统调用读取源文件的内容,使用`open`和`write`系统调用将内容写入目标文件。
`copyDir`函数使用`mkdir`系统调用创建目标目录,使用`opendir`和`readdir`系统调用遍历源目录中的所有文件和子目录,然后对于每个文件或目录,如果是目录则递归调用`copyDir`函数,如果是文件则调用`copyFile`函数进行复制。最后使用`closedir`系统调用关闭源目录。
在`main`函数中,我们首先检查命令行参数的个数,然后调用`copyDir`函数进行复制。
需要注意的是,这个程序中使用了一些Linux特定的系统调用,如果要在其他操作系统上运行,可能需要做一些修改。
In file included from linux.c:1:0: /usr/include/arpa/inet.h:53:14: note: expected ‘struct in_addr’ but argument is of type ‘char *’ extern char *inet_ntoa (struct in_addr __in) __THROW; ^ linux.c:4:1: error: incompatible type for argument 1 of ‘inet_ntoa’ char* value2 = inet_ntoa("10.194.71.60"); ^ In file included from linux.c:1:0: /usr/include/arpa/inet.h:53:14: note: expected ‘struct in_addr’ but argument is of type ‘char *’ extern char *inet_ntoa (struct in_addr __in) __THROW; ^ linux.c:6:8: error: expected declaration specifiers or ‘...’ before string constant printf("address1: %s\n",value1); ^ linux.c:6:25: error: expected declaration specifiers or ‘...’ before ‘value1’ printf("address1: %s\n",value1); ^ linux.c:7:8: error: expected declaration specifiers or ‘...’ before string constant printf("address2: %s\n",value2); ^ linux.c:7:25: error: expected declaration specifiers or ‘...’ before ‘value2’ printf("address2: %s\n",value2); ^
这段错误提示是关于使用 `inet_ntoa` 函数的问题。`inet_ntoa` 函数期望的参数类型是 `struct in_addr`,但你传递了一个 `char *` 类型的字符串作为参数。因此,编译器报告了第一个错误,指出参数类型不匹配。
另外,你在第四行中定义了一个 `char *` 类型的变量 `value2`,并将其初始化为一个字符串字面量。然后你将该变量作为参数传递给 `inet_ntoa` 函数,这也导致了类型不匹配的错误。
如果你想将字符串转换为 `in_addr` 结构体,可以使用 `inet_pton` 函数。如果你想将 `in_addr` 结构体转换为字符串,则可以使用 `inet_ntop` 函数。这两个函数都需要传递一个指向 `in_addr` 结构体的指针作为参数。
阅读全文