我有一個字串“token”和一個空的字串陣列“arr”。我想將令牌添加到 arr 的第一個索引。我試過arr[0][0] = token,但這僅適用于字符,我也試過,arr[0] = token但這會引發錯誤“運算式必須是可修改的左值”。我的完整程式是:
#include <stdio.h>
#include <string.h>
char arr[100][100] = {};
char *token = strtok(StringToBeSplit, " ");
int i = 0;
while(token != NULL) {
arr[0] = token;
printf("%s\n", token);
token = strtok(NULL, " ");
i ;
}
我該怎么辦?
uj5u.com熱心網友回復:
您需要復制字串而不是分配它。您的代碼的另一個問題是只有陣列的元素 [0] 被填充
#include <stdio.h>
#include <string.h>
char arr[100][100] = {};
char *token = strtok("split this string", " ");
int i = 0;
while(token != NULL) {
strcpy(arr[i], token);
printf("%s\n", token);
token = strtok(NULL, " ");
i ;
}
// At this point, i contains the number of tokens.
如果您從 -1 開始 i 并在 strcpy 之前遞增,那么 i 將是最后一個元素的索引。
uj5u.com熱心網友回復:
您需要避免將字串文字分配給 strtok。基本上使用 strcpy 將令牌復制到陣列并按照先前答案的建議增加陣列。像這樣的東西:-
#include <stdio.h>
#include <string.h>
int main(){
char arr[100][100] = {};
char str[] = "Split this string";
char sep[] = " ";
char *token = strtok(str, sep);
int i = 0;
while(token != NULL){
strcpy(arr[i], token);
token = strtok(NULL, sep);
i ;
}
//Test If it can print the strings
for(int j = 0; j < i; j )
printf("%s\n", arr[j]);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/361252.html
