作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在C++中,我想做
char buffer[1024] = "command insert file1 file2 ..."
把它变成
*argv[0] = "command"
*argv[1] = "insert"
*argv[2] = "file1"
等等。有没有一些简单的方法可以做到这一点,比如 split() 或其他什么?我不能使用 boost 或 vectors,因为元素需要是 linux 库函数(如 execvp)的 c 字符串,并且它们需要在没有 boost 或任何额外库的服务器上编译
我在网上看到了使用strtok的例子,但是这些例子之后似乎没有存储值,只是打印出来。另一种方法似乎是一些复杂得可笑的方法,涉及循环和计算空格和转义字符。有没有更简单的方法?这让我抓狂。
编辑:作为引用,这是我的主要功能到目前为止的样子:
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <cstdlib>
#include <cstdio>
#include <iostream>
using namespace std;
void runCommand(char **argv);
void splitIntoArgs(char *command, char **argv);
int main()
{
char buffer[1024];
char *argv[5];
while (1)
{
// prompt user for command to run
cout << "Enter command: ";
cin >> buffer; //read the buffer
cout << endl;
splitIntoArgs(buffer, argv); //split the command into separate arguments
if (strcmp(argv[0], "exit") == 0)
return 0;
runCommand(argv);
}
}
最佳答案
你问这是一个 c++ 问题,那么你为什么不以标准库的形式使用 c++ 的强大功能,它为你提供 std::string
和 std::vector
#include <vector>
#include <string>
std::vector<std::string> split(const std::string& str){
std::vector res;
size_t old_position = 0;
for(size_t position = 0; position = str.find(" ", position); position != std::npos){
res.push_back(res.substr(position, position-old_position));
old_position = position;
}
}
关于c++ - 如何将 C 字符串拆分为 C 字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23125357/
我是一名优秀的程序员,十分优秀!