1

私はCを始めたばかりなので、この質問はばかげているかもしれません. このコンパイル警告が表示され続ける理由について何か考えはありますか?

質問:文字列をにコピーするときに、改行やタブなどの文字をや などescape(s,t)の目に見えるエスケープ シーケンスに変換する関数を作成します。\n\tts

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;

    }
}
}
4

3 に答える 3

1

t[i] は char 要素を提供し、 t[i] = "t" 、 t[i++] = "\" は文字列のアドレスを char 要素に割り当てます

一重引用符 ' ' で割り当てる必要があります。

t[i] ='t'; または t[i] = '\';

于 2013-06-20T09:26:47.973 に答える
0

"\\"orリテラルは、読み取り専用メモリ内の"t"アドレスに評価される文字列リテラルです。

あなたがおそらく望むのは'\\'respです。't'その正確な文字コード(ASCIIでは0x5C / 92)に評価されます

于 2013-06-20T09:10:38.480 に答える
0

tis char array は、 t[i] が char 要素を提供しますが、インラインであることを意味します

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

これらの要素に文字列をプッシュしています。文字列は、単一の文字ではなく文字の配列として知られています。書かれたもの" "は文字列として知られています。上記の割り当てを行うことで、文字列のアドレス(ポインタ)を渡しています。

于 2013-06-20T09:08:44.850 に答える