2016-10-13 3 views
-1

EDIT: новая проблемаstrtok() очень странное поведение

char * symbolInList = listOfSymbolTokens[0]; 
    char * addressOfSymbol = listOfSymbolTokens[1]; 

    printf("symbolLookingFor: %s\n", symbolLookingFor); 
    printf("symbolInList: %s\n", symbolInList); 
    printf("addressOfSymbol: %s\n", addressOfSymbol); 
    if (strcmp(symbolInList, symbolLookingFor) == 0) { 
     strcpy(tokenAddress, addressOfSymbol); 
     return; 
    } 
    printf("did not enter for loop\n"); 

По какой-то причине, зЬгстр (symbolinList, symbolLookingFor) не возвращает 0, даже если они одинаковы.

symbolLookingFor: abc 
symbolInList: abc 
addressOfSymbol: 3011 

did not enter for loop 

это не входит, если заявление

ответ

1

Это неправильно

const char sdilem[1] = " "; 

Чтобы сохранить " " строку, которую нужно не менее 2 символов в буфере. (В C это не ошибка.)

Во-первых, чтобы избежать таких ошибок, вам не нужно указывать размер явно

const char sdilem[] = " "; 

Во-вторых, в этом случае вы могли бы просто использовать

const char *sdilem = " "; 
+0

Отлично, что сработало. – yanhua

+0

Почему это работает, когда трехбуквенное слово не начинается с a или b? Если sdilem не хватило памяти, то почему он вообще работает? – yanhua

+0

@yanhua: Неопределенное поведение не определено. Все возможно. Это может просто зависеть от содержимого мусора (или не так-мусора) соседней памяти. – AnT

Смежные вопросы