1

我刚开始 C 所以这个问题可能很愚蠢。关于为什么我不断收到此编译警告的任何想法?

问题:编写一个函数escape(s,t),将换行符和制表符之类的字符转换为可见的转义序列,例如\nand ,\t因为它将字符串复制ts.

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

t是 char 数组意味着 t[i] 会给你一个 char 元素但在行

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

您在这些元素中推送字符串。字符串被称为字符数组而不是单个字符。写入的" "内容称为字符串。通过进行上述分配,您正在传递字符串(指针)的地址。

于 2013-06-20T09:08:44.850 回答
0

A "\\"or"t"字面量是一个字符串字面量,它计算为它在只读内存中的地址。

你可能想要的是'\\'resp。't'哪个 evauates 到那个确切的字符代码(ASCII 中的 0x5C / 92)

于 2013-06-20T09:10:38.480 回答