2016-04-23 9 views
0

Я пытаюсь сравнить два массива символов и распечатать на терминал, была ли найдена строка. Когда я запускаю свой код, выводимый вывод возвращает нагрузку jibber, которая не связана с тем, что я указал. Я думаю, что больше памяти, чем я указал, печатается, но я не уверен, почему.Использование strstr в C MBED, результат печати

Str str возвращает указатель на начальный индекс найденной строки (если найден), если нет. Я предполагаю, что это то, что вызывает ошибку, но я подумал, только проверяя, был ли результат нулевым, а не печатать результат.

Мой код:

include "mbed.h" 
include "string.h" 

char input[] = "Hello mbed"; 
char value[] = "llo"; 

int main() { 

    char * output; 

    output = strstr(input, value); 

    bool found = false; 

    if (output != NULL) { 
     found = true; 
    } 

    printf(found ? "true" : "false"); 
} 

Мой выход:.!

trueloHello mbed½mà $ Õ [F FðMøDà (ÛÝéBÝ @ \ À0 ZFGñ @@ ЦТС ZFGmºñªñ ÝÜàøZFGm¸ñ¨ñôÜ [F F «AE- + -éðAF% FFÔà9F ° GmdùÕ (F½èð-éðAF% FFÈÕ0'à«ÕàAF8F ° GmdùÕ (F½èðJh * D HS [email protected] pGðμF ° F2¡ü ÷ EO (¿% 0OÐWø% Н ± м-Uoga-IHB ` ° ð½-? Ò x: (Ð FHFþ ÷ ýhFþ ÷ mý (3 ý ¿÷ ÷ ÷ à à à à à à à à à à à à ý ý ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ ÷ "" "" "" "" "" "" "" "" ""%%%%%%%%%%%%%% е ° ð½Oð 0 ° ð½ð¿ $ ÛÑð¿ $$ Ос: ТТЛ:% р (¼¿ pGJëPø .......

+0

Кажется, что ошибка в реализации компилятора ... возможно, вы могли бы просмотреть сгенерированный код сборки, чтобы узнать, что происходит. Или обратитесь к поставщику. –

+0

при компиляции всегда включайте все предупреждения. затем исправить полученные сообщения из компилятора – user3629249

+0

Я не вижу ничего плохого в коде, который вы опубликовали, что вызовет эту ошибку. Является ли заголовочный файл «mbed.h» чем-то болтливым? Попробуйте избавиться от строки 'include 'mbed.h" '. –

ответ

0

Там проблема с компилятором и как он работает с константными строками. Добавьте символ NULL для строк, чтобы увидеть, если он прекращает печать ...

printf(found ? "true\0" : "false\0"); 
+0

Привет, спасибо за ответ. Тем не менее, все еще путают ерунду. Я изменил свой код следующим образом: if (output) {.... - чтобы удалить зависимости от символа NULL, но это не удалось. – Charlie

+1

Я никогда не слышал о том, что компилятор плохо себя ведет. –

+0

Я тоже этого не видел. Возможно, стоит поднять его как ошибку, они могут это исправить. Это, безусловно, удивительное поведение со строкой const. – Harry

1

вот исправленный код, который аккуратно собирает, и работает в соответствии с пожеланиями

Обратите внимание на способ, которым printf() параметры Создаются

Примечание исправленный список #include заявлений

//include "mbed.h" 
#include <stdio.h> // printf() 
#include <string.h> // strstr() 
#include <stdbool.h> // bool, true, false 

char input[] = "Hello mbed"; 
char value[] = "llo"; 

int main(void) 
{ 

    char * output = strstr(input, value); 

    bool found = false; 

    if (output) 
    { 
     found = true; 
    } 

    printf("%s\n", ((found)? "true" : "false")); 
} 
+0

Я взял опубликованный код и изменил его более или менее таким же образом, и он тоже работал для меня тоже. Я думаю, что что-то не так с исходным кодом или его средой, которую мы не можем видеть. –

0

Е() может быть макрос на ваш компилятор/Весах гу/IDE. Включая файл заголовка, гарантирует, что он работает так, как ожидалось. Кроме того, на встроенном, main() никогда не должен возвращаться