【问题标题】:Pointer without a cast?没有演员表的指针?
【发布时间】:2013-06-20 09:01:07
【问题描述】:

我刚开始使用 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;

    }
}
}

【问题讨论】:

  • t[i++] = '\\';
  • 还有input[i] = (char)c; in get_line()
  • 谢谢克雷克!! PS trojonfoe 铸造显然不是必需的。无论如何,谢谢。
  • @the_lost_one 强制转换不是必需的,而是很好的做法。这意味着“我实际上知道我在这里做什么,试图将一个 int 存储到一个 char 中”。而input[i] = c 的意思是:“要么我知道我在做什么,这很好,要么我不知道我在做什么,这是一个潜在的错误”。
  • 哦!感谢您的提醒

标签: c


【解决方案1】:

t[i] 给你 char 元素, t[i] = "t" , t[i++] = "\" 将字符串的地址分配给 char 元素

你需要用单引号''赋值。

t[i] ='t';或 t[i] = '\';

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      您可能想要的是'\\' 和。 't' 计算出准确的字符代码(ASCII 中的 0x5C / 92)

      【讨论】:

        猜你喜欢
        • 2015-04-18
        • 2018-02-06
        • 1970-01-01
        • 1970-01-01
        • 2019-04-16
        相关资源
        最近更新 更多