2014-01-05 4 views
0

Привет, я пытаюсь прочитать строку из main, а затем проанализировать ее на функцию и найти ее размер, но мой код не работает, можете ли вы мне помочь?Указатель Strlen в C

//main 
     int size=10; 
      char *string= (char*) malloc (sizeof(char)*15); 

      scanf("%s",string); 
      findAllReplacements(NULL,10,string); 

//at findAllReplacements 

void findAllReplacements(nameInfoT* names,int size,char* expression){ 
    int ssize=strlen(expression); 
    printf("%stringsize:%d\n",ssize); 

Программа вылетает в режиме strlen. Что я делаю не так? Я даю в качестве входного слова «astring»

Аргумент размера не имеет ничего общего с размером строки;

+0

Находит ли 14 символов для ввода? –

+1

'sizeof (char)' is '1'. –

+3

[Не набрасывайте возвращаемое значение 'malloc()'] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc/605858#605858)! –

ответ

2

Программа вылетает из строя.

Возможно, потому что строка, введенная вами из stdin, больше, чем размер выделенной памяти.

Несколько больше вопросов

printf("%stringsize:%d\n",ssize); 

Aparently, %s интерпретируется как если бы вы проездом строку как vararg. Таким образом, в вашей строке форматирования ваш printf исключает два аргумента строки типа и целого числа последовательно, но вместо этого завершил одно целое число. Вы должны быть закодированы как

printf("%%stringsize:%d\n",ssize); 

В C, отбрасывая возвращаемое значение malloc излишни.

+0

Да, я хочу достаточно осторожно, и я набрал еще один% по ошибке. Так что это становится действительно глупым вопросом. – JmRag

+0

@ H2CO3: Я выиграл, я вызываю явное приведение в 'C' ошибки, но, скорее, ненужную и плохую практику. Итак, я не согласен с вашим редактированием. – Abhijit

+0

@Abhijit It ** is ** ошибка (просто прочитайте [это] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc/605858#605858)). Что вы называете делающим, что приводит к большому ущербу и никакой пользе? Я называю это преступлением (это не так) или ошибкой/ошибкой. –

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