Опитвам се да разделя следния низ на три отделни променливи, т.е. a, b и c.:
" mov/1/1/1,0 STR{7}, r7"
всеки трябва да държи различен сегмент от низа, напр.
a = "mov/1/1/1,0"
b = "STR{7}"
c = "r7"
Може да има интервал или табулатор между всяка команда; това прави тази кодова част по-сложна.
Опитах се да използвам strtok
за манипулиране на низове, но не се получи.
char command[50] = " mov/1/1/1,0 STR{7}, r7";
char a[10], b[10], c[10];
char * ptr = strtok(command, "\t");
strcpy(a, ptr);
ptr = strtok(NULL, "\t");
strcpy(b, ptr);
ptr = strtok(NULL, ", ");
strcpy(c, ptr);
но това наистина обърква нещата, тъй като променливите a, b
и c
задържат повече стойности, отколкото би трябвало, което води програмата до срив.
Въвеждането може да варира от:
" mov/1/1/1,0 STR{7}, r7"
"jsr /0,0 PRTSTR"
"mov/1/1/0,0 STRADD{5}, LASTCHAR {r3} "
в който стойностите на a,b и c се променят в различна част от дадения низ.
Казаха ми, че е по-безопасно да използвам sscanf за този вид маниери, отколкото strtok, но не съм сигурен защо и как може да ми помогне.
Ще се радвам да чуя вашето мнение!
mov/1/1/0,0
иLASTCHAR {r3}
Би било по-дълго от девет знака (a[10]
,c[10]
). - person BLUEPIXY   schedule 18.08.2013strtok
само с"\t"
като разделител. Може би просто искате" \t"
(интервали или раздели, както казвате), въпреки че това ще приеме всяка последователност от един или повече интервали или раздели като разделител. Ако искате две интервали да означават „празно“ поле, това няма да работи. - person Chris Dodd   schedule 18.08.2013"jsr /0,0 PRTSTR"
хвърля гаечен ключ в работата; има значима запетая във второто поле, докато в другите два примерни низа запетаята във второто поле не е значима. Ако трябва да премахнете крайните запетаи, можете да го направите след разделянето на базата на пространство. - person Jonathan Leffler   schedule 18.08.2013