2015-09-25 3 views
-2

кажется такой глупой вещью, чтобы спросить, но я серьезно не знаю, почему это происходит. Может быть, что это почти 5 утра, и я все еще делаю это, но ..Почему мой printf делает это?

Он должен печатать -ca, но почему, когда я скомпилировать его, он печатает

- 
CA? 

вместо -ca, там ISN» t a '\ n' в любом месте. Можете ли вы, ребята, подумать о чем-нибудь логичном, что бы объяснить это?

int main(int argc, char* argv[]){ 

int check = 0; 
char *thing = (char*)malloc(2 * sizeof(char)); 

strcpy(char, "CA"); 

some code.. 

    do{ 

    more code... 

    if(condition== 1) { 
      more code.... 
      if(check == 0) { 
       printf("-"); 
       check++; 
      } 


    if (some conditon != NULL){ 
     printf("%s\n",thing); 
    }while(condition) 


return 0; 

}

+2

Как вы ожидаете 'printf («% s \ n », вещь);' знать, сколько символов нужно печатать? –

+2

То, что Дэвид хочет сказать, заключается в том, что ваша вещь не отменена. –

+0

Должно быть 'char thing [] =" CA ";' Что касается новой строки, опубликуйте [Минимальный полный проверяемый пример] (http://stackoverflow.com/help/mcve), который демонстрирует проблему, а затем мы будем говорить. – user3386109

ответ

1

printf печатает нулем строку в stdout. если жало не равно нулю прекращено printf будет идти на печать мусора на stdout до нулевого терминатора встречает , так что вы должны все один в массив персонажа

char thing[3] = {'C','A',0};

Теперь printf напечатают

- 
CA 
+0

Код ранее не задан в 'strcpy (char," CA ");' задолго до 'printf()'. – chux

4

Вы не выделили достаточно места для своей строки. Каждая строка имеет нулевой ограничитель, поэтому 2-символьная строка нуждается в 3 байтах в массиве. Ваш strcpy() записывает за пределы массива thing, когда он копирует нулевой байт, что приводит к неопределенному поведению.

Использование

char *thing = malloc(3); 

Вы также можете использовать strdup(), что делает копию строки в динамической памяти, автоматически выделяя достаточное пространство на основе длины исходной строки.

char *thing = strdup("CA"); 
+0

Еще лучше может быть 'char * thing = strdup (" CA ");' –

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