我想找到一个字符串,它是在二维字符数组中并返回它的索引。例如:查找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' –