我正在尝试创建一个带有字符串和数组的metod,并使用strtok()将字符串拆分为字符串数组。我假设给定的数组有足够的空间,并且当数组中有空格时进行拆分。我认为这几乎是正确的,我只需要最后一次推送:)这是我的代码atm:
string_to_stringarray(char* string, char** array) {
int i = 0;
array[i] = strtok(string, " ");
while (array != NULL) {
array[i++] = strtok(NULL, " ");
}
}
答案 0 :(得分:2)
while
条件毫无意义。 array
的值在函数中没有变化,因此循环是无限的(除非array
从NULL
开始,在这种情况下第一次赋值给array[0]
导致未定义的行为)。
应该是这样的:
size_t split_string(char *string, char **array) {
size_t i = 0;
char *token = strtok(string, " ");
while (token != NULL)
{
array[i++] = token;
token = strtok(NULL, " ");
}
return i;
}
这将返回找到的字符串数,并更改名称,因为用户代码无法定义以str
开头的函数。
答案 1 :(得分:0)
while语句中的条件
while (array != NULL) {
^^^^^^^^^^^^^
是错误的,因为已经分配了来自帖子的数组。
该功能可以看起来像
void string_to_stringarray( char *string, char **array )
{
int i = 0;
array[i] = strtok( string, " " );
while ( array[i] != NULL ) array[++i] = strtok( NULL, " " );
^^^
}
答案 2 :(得分:0)
我已经完成了与shell相似的事情我基本上已经完成在C ++中构建,除了我使用向量作为队列而不是数组。也许你可以从我已经证明有效的算法中反弹。
int i = inputString.find_first_not_of(" ");
int j = inputString.find_last_not_of(" \n\r");
int k;
string stringToAdd;
while (i != -1) {
k = i;
while (inputString.at(k) != ' ') {
if (k == j) {
break;
};
k++;
};
if (k != j) {
k--;
};
stringToAdd = inputString.substr(i, k - i + 1);
i = inputString.find_first_not_of(" ", k + 1);
commandQueue.push_back(stringToAdd);
};
答案 3 :(得分:0)
所以解决方案很明显,我在while循环中错过了[i]。
正确的行while (array[i] != NULL){
感谢您的快速解答:)因为我没有取得任何进展,所以上床睡觉了