2012-09-09 4 views
2

Итак, я прокомментировал часть scanf (и только что инициализировал ее своей собственной строкой), почему она сбой, если я использую scanf? Я считаю, что фактические аргументы, которые я поставил в scanf(); являются правильными.Не удается передать указатели на scanf ("% s", ptr);

#include <stdio.h> 
#include <stdlib.h> 
int strendmilan(char *s,char *t) 
{ 
    int scntr = 0,tcntr = 0; 
    while(*(s+(scntr++)) != '\0') 
     ; 
    --scntr; 
    while(*(t+(tcntr++)) != '\0') 
     ; 
    --tcntr; 
    while(tcntr >= 0) 
     if(*(s+scntr--) == *(t+tcntr--)) 
      ; 
     else 
      return 0; 
    return 1; 
} 
int main() 
{ 
    char *s,*t; 
    /* 
    scanf("%s",s); 
    scanf("%s",t); 
    */ 
    s = "HAHAHACOOL"; 
    t = "COOL"; 
    if(strendmilan(s,t) == 0) 
     printf("NOT"); 
    else 
     printf("YES"); 
    getch(); 
} 
+3

Назначить некоторую память 's' перед вызовом' scanf'. – cnicutar

ответ

7

Проблема заключается в том, что вы отправляете scanf() указатель на буфер (например, s), где он может хранить информацию, читать, но вы не выделили любое пространство буфера, на который указывает s (и то же самое для t)

char *s,*t; 
scanf("%s",s); 

Таким образом, вы можете либо выделить массив полукокса для s или использовать malloc() выделить некоторые хранения и присвоить возвращаемое значение этого вызова s.

+0

Но s = "HAHAHACOOL"; \t t = "COOL"; работает, даже если я не выделяю место – latenightcode

+0

@vincentbelkin, которое действительно ничего не меняет, что я разместил. 'scanf' хочет указать указатель на место, где он может хранить данные. Вы создаете указатель, а затем сразу вызываете 'scanf' * без *, выделив любое хранилище для' s', чтобы указать (и для 'scanf' для успешного использования). – Levon

+2

@vincentbelkin, 't =" COOL "' неявно выделяет некоторую память для хранения строкового литерала, а затем назначает местоположение этой памяти переменной-указателю. 'scanf' ожидает, что переменная указателя уже укажет на выделенную память, в которую будет помещаться символ. –

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