Первое, что вам нужно сделать, это найти количество строк, которые у вас будут. Это легко сделать с чем-то вроде:
int len = strlen(filename);
int numwords = 1;
for(i = 0; i < len; i++) {
if(filename[i] == ' ') {
numwords++;
// eating up all spaces to not count following ' '
// dont checking if i exceeds len, because it will auto-stop at '\0'
while(filename[i] == ' ') i++;
}
}
В приведенном выше коде я предполагаю, что в имени файла будет хотя бы одно слово (т.е. оно не будет пустой строкой).
Теперь вы можете выделить память для Argument1.
Argument1 = new char *[numwords];
После этого у вас есть два варианта:
- использовать strtok (http://www.cplusplus.com/reference/clibrary/cstring/strtok/)
- реализовать вашу функцию для разделения строки
Это можно сделать так:
int i,cur,last;
for(i = last = cur = 0; cur < len; cur++) {
while(filename[last] == ' ') { // last should never be ' '
last++;
}
if(filename[cur] == ' ') {
if(last < cur) {
Argument1[i] = new char[cur-last+1]; // +1 for string termination '\0'
strncpy(Argument1[i], &filename[last], cur-last);
last = cur;
}
}
}
Приведенный выше код не оптимизирован, я просто попытался сделать его как можно более простым для понимания.
Я тоже не тестировал, но должно работать. Предположения, которые я сделал:
- строка заканчивается нулем
- в строке есть хотя бы 1 слово.
Также всякий раз, когда я ссылаюсь на строку, я имею в виду массив символов: P
Некоторые ошибки, которые я заметил в вашем коде:
- в c / c ++ "" - это указатель на массив const char, который содержит пробел.
Если вы сравните это с другим "", вы сравните с ними указатели. Они могут (и, вероятно, будут) разными. Для этого используйте strcmp (http://www.cplusplus.com/reference/clibrary/cstring/strcmp/).
- Вы должны научиться динамически распределять память. В c вы можете сделать это с помощью malloc, в c ++ - с помощью malloc и new (лучше использовать new вместо malloc).
Надеюсь, я помог!
PS если в моем коде есть ошибка, сообщите мне и я исправлю ее.