我想找到一個字符串,它是在二維字符數組中並返回它的索引。例如:查找C字符串中的二維字符數組中的字符串
char idTable[255][32];
char tester[] = { 't','e','s','t','e','r','\0' };
memcpy(idTable[43], tester, 7);
uint8_t id = getID(name[0]);
//name is returned from function "char **name = func();"
//but I have the same results when I try using normal char array...
我已經與下面的代碼的第一部分部分成功,但它是找到一個匹配,如果單詞的一部分是相同的(一個,ONETWO)。如果我將「else if」添加到第一個「if」,它總是會轉到「else if」。
文件打印不同的結果爲 printf("idTable string lenght:\t %u\n", strlen(idTable[index]));
和 printf("foundMatch string lenght:\t %u\n", strlen(foundMatch));
剩下的,除非我添加printf("Index:\t %i\n", index);
。
uint8_t getID(char *name) {
printf("\nInserted name:\t %s\n", name);
uint8_t index;
for (uint8_t r = 0; r < 255; r++) {
if (strstr(idTable[r], name) != NULL) {
printf("Found '%s' in position:\t %d\n", name, r);
index = r;
}
}
printf("Index:\t %i\n", index); // THIS LINE
char foundMatch[strlen(idTable[index])];
printf("idTable string lenght:\t %u\n", strlen(idTable[index]));
for (uint8_t c=0; c<strlen(idTable[index]); c++) {
foundMatch[c] = idTable[index][c];
}
printf("foundMatch string lenght:\t %u\n", strlen(foundMatch));
if (strcmp(foundMatch, nodeName) == 0) {
printf("Confirmed\n");
return index;
} else {
printf("Second test failed\n");
return 0;
}
}
爲什麼我得到這個奇怪的結果,有沒有更好的方法來做到這一點?
提醒:'printf'和'strlen'功能需要一個「\ 0 '來標記C風格字符串的結尾。你有沒有把一個放在字符串的末尾?這些函數將繼續執行直到找到'\ 0'。 –
函數參數'* name'應該是空終止的,因爲我使用'strtok'來寫入包含它的數組。我添加了'\ 0'到'tester []'數組,但輸出保持不變'nodeIDsTable string lenght:6','foundMatch string lenght:14' –