需要在C ++中使用char **代替std :: string *

愈伤组织C

我正在为我的操作系统课程分配作业。我们可以选择使用C或C ++,因此我决定使用C ++,因为我在工作上比C练习了一段时间。

我将需要调用(从Linux上的$ man execvp ”)

int execvp(const char *file, char *const argv[]);

这(除非我弄错了)意味着我需要一个C样式的char *数组(C中的字符串数组),并且将无法使用C ++中的std :: string。

我的问题是:在C ++中制作/使用char *数组而不是字符串数组的正确方法什么?大多数人倾向于说在C ++中不再使用malloc(我现在尝试了一些复杂性)

char** cmdList = (char**)malloc(128 * sizeof(char*));

但是我不知道如何制作一个char *数组。即使我使用的是C ++,仍然可以解决在C语言中的问题吗?我从来没有遇到过无法在C ++中使用字符串的情况。

感谢大家的时间。

塞巴斯蒂安·雷德尔(Sebastian Redl)

如果std::vector<std::string>像在C ++中那样将参数放入,则需要进行少量转换才能获得所需的char ** execvp幸运的是,两者std::vectorstd::string在内存中都是连续的。但是,astd::vector<std::string>不是指针数组,因此您需要创建一个指针。但是您也可以使用a vector

// given:
std::vector<std::string> args = the_args();
// Create the array with enough space.
// One additional entry will be NULL to signal the end of the arguments.
std::vector<char*> argv(args.size() + 1);
// Fill the array. The const_cast is necessary because execvp's
// signature doesn't actually promise that it won't modify the args,
// but the sister function execlp does, so this should be safe.
// There's a data() function that returns a non-const char*, but that
// one isn't guaranteed to be 0-terminated.
std::transform(args.begin(), args.end(), argv.begin(),
  [](std::string& s) { return const_cast<char*>(s.c_str()); });

// You can now call the function. The last entry of argv is automatically
// NULL, as the function requires.
int error = execvp(path, argv.data());

// All memory is freed automatically in case of error. In case of
// success, your process has disappeared.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C主参数中使用long **代替char **

来自分类Dev

有时可以在C ++中使用std :: atomic代替std :: mutex吗?

来自分类Dev

在C中使用char / string指针会产生奇怪的输出

来自分类Dev

初始化并使用C ++ std :: string作为char数组

来自分类Dev

需要在Visual Studio(C#)中使用DLL的帮助

来自分类Dev

在C ++中使用UTF-8 std :: string对象

来自分类Dev

'std :: basic_string <char,std :: char_traits <char>,std :: allocator <char >> :: c_str':非标准语法; 使用“&”创建指向成员的指针

来自分类Dev

需要在If中使用VAR

来自分类Dev

C ++如何从std :: string删除\ 0 char

来自分类Dev

使用std :: string而不是char *不好吗?

来自分类Dev

函数的char指针是否需要在C中分配内存

来自分类Dev

为什么用“ std :: vector <std :: string>&”代替“ void”?

来自分类Dev

为什么用“ std :: vector <std :: string>&”代替“ void”?

来自分类Dev

如何在C ++中使用* char + * char?

来自分类Dev

在std :: string或char数组中间使用NULL char更新

来自分类Dev

使用std :: deque代替vector时出现错误“ C2027使用未定义类型”

来自分类Dev

在C(GCC)中使用char *

来自分类Dev

使用const_cast <char *>()将std :: string :: c_str()的结果传递给mkdtemp()。

来自分类Dev

需要在 Java 中引用和使用 C# dll

来自分类Dev

错误C3867'std :: basic_string <char,std :: char_traits <char>,std :: allocator <char >> :: c_str':非标准语法; 使用“&”创建指向成员的指针

来自分类Dev

需要在SELECT DISTINCT中使用COLLATION

来自分类Dev

是否需要在Flink中使用Windows?

来自分类Dev

需要在WinRT中使用IConvertible

来自分类Dev

如何使用std :: allocator代替realloc?

来自分类Dev

为什么我需要在C#和PostgreSQL中使用Npgsql引用列和表?

来自分类Dev

为什么需要在Objective-C中使用@property关键字?

来自分类Dev

我需要在Objective-C中使用哪个版本的LLVM和XCode?

来自分类Dev

为什么需要在Objective-C的头文件中使用“外部静态”定义常量?

来自分类Dev

为什么我需要在C ++中使用`size_t`?

Related 相关文章

  1. 1

    在C主参数中使用long **代替char **

  2. 2

    有时可以在C ++中使用std :: atomic代替std :: mutex吗?

  3. 3

    在C中使用char / string指针会产生奇怪的输出

  4. 4

    初始化并使用C ++ std :: string作为char数组

  5. 5

    需要在Visual Studio(C#)中使用DLL的帮助

  6. 6

    在C ++中使用UTF-8 std :: string对象

  7. 7

    'std :: basic_string <char,std :: char_traits <char>,std :: allocator <char >> :: c_str':非标准语法; 使用“&”创建指向成员的指针

  8. 8

    需要在If中使用VAR

  9. 9

    C ++如何从std :: string删除\ 0 char

  10. 10

    使用std :: string而不是char *不好吗?

  11. 11

    函数的char指针是否需要在C中分配内存

  12. 12

    为什么用“ std :: vector <std :: string>&”代替“ void”?

  13. 13

    为什么用“ std :: vector <std :: string>&”代替“ void”?

  14. 14

    如何在C ++中使用* char + * char?

  15. 15

    在std :: string或char数组中间使用NULL char更新

  16. 16

    使用std :: deque代替vector时出现错误“ C2027使用未定义类型”

  17. 17

    在C(GCC)中使用char *

  18. 18

    使用const_cast <char *>()将std :: string :: c_str()的结果传递给mkdtemp()。

  19. 19

    需要在 Java 中引用和使用 C# dll

  20. 20

    错误C3867'std :: basic_string <char,std :: char_traits <char>,std :: allocator <char >> :: c_str':非标准语法; 使用“&”创建指向成员的指针

  21. 21

    需要在SELECT DISTINCT中使用COLLATION

  22. 22

    是否需要在Flink中使用Windows?

  23. 23

    需要在WinRT中使用IConvertible

  24. 24

    如何使用std :: allocator代替realloc?

  25. 25

    为什么我需要在C#和PostgreSQL中使用Npgsql引用列和表?

  26. 26

    为什么需要在Objective-C中使用@property关键字?

  27. 27

    我需要在Objective-C中使用哪个版本的LLVM和XCode?

  28. 28

    为什么需要在Objective-C的头文件中使用“外部静态”定义常量?

  29. 29

    为什么我需要在C ++中使用`size_t`?

热门标签

归档