2013-06-20 4 views
1

Я только что начал C, поэтому этот вопрос может быть глупым. Любые мысли о том, почему я продолжаю получать это предупреждение о компиляции?Указатель без литья?

Вопрос: Напишите функцию escape(s,t), которая преобразует символы, такие как символ новой строки и табуляции в видимых управляющих последовательностей, как \n и \t, как она копирует строку t в s.

3-2.c:37:11: warning: assignment makes integer from pointer without a cast [enabled by default] 
3-2.c:38:9: warning: assignment makes integer from pointer without a cast [enabled by default] 
3-2.c:42:11: warning: assignment makes integer from pointer without a cast [enabled by default] 
3-2.c:43:9: warning: assignment makes integer from pointer without a cast [enabled by default] 

Это код:

int get_line (char input[], int max_size); 
void escape(char s[], char t[]); 

main() { 
    int length, l, i; 
char line[MAX], t[MAX]; 

while ((length = get_line (line, MAX)) > 0) 
    escape (line, t);  
    printf ("%s", t); 


} 


int get_line (char input[], int max_size) { 
    int i, c; 
for (i = 0; i < max_size-1 && (c = getchar()) != EOF && c != '\n'; ++i) 
    input[i] = c; 

if (c == '\n') { 
    input[i] = c; 
    ++i; 
} 
input[i] = '\0'; 
return i; 
} 

void escape(char s[], char t[]) { 
int i; 
for (i= 0; s[i] != '\0'; ++i) { 
    switch(s[i]) { 

    case '\t' : 
        //This is where i get the warning. 
     t[i++] = "\\"; 
     t[i] = "t"; 
     break; 
    case '\n' : 
     t[i++] = "\\"; 
     t[i] = "n"; 

    default : 
     t[i] = s[i]; 
     break; 

    } 
} 
} 
+2

Скажите 't [i ++] = '\\';' и т. Д. –

+0

Также 'input [i] = (char) c;' в 'get_line()'. – trojanfoe

+0

Спасибо Kerrek !! PS Trojonfoe casting, по-видимому, не требуется. В любом случае спасибо. –

ответ

1

т [я] дает элемент обугленного, т [я] = "т", т [я ++] = "\" присваивает адрес строки к элементу char

вам нужно назначить одинарные кавычки ''.

t [i] = 't'; или t [i] = '\';

0

t является массив символов означает, т [я] даст вам обугленного элемент, но в строке

t[i++] = "\\"; и t[i] = "t";

вы нажатие строки в этих элементах. Строки известны как массив символов, а не один символ. Что-то написанное в " " известно как st ring.By делая вышеупомянутое назначение, вы передаете адрес строки (указатель).

0

A "\\" или "t" literal - строковый литерал, который оценивает его адрес в постоянной памяти.

Возможно, что вы, возможно, захотите, это '\\' resp. 't' который evauates к этому коду точный характер (0x5c/92 в ASCII)

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