【发布时间】: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;inget_line()。 -
谢谢克雷克!! PS trojonfoe 铸造显然不是必需的。无论如何,谢谢。
-
@the_lost_one 强制转换不是必需的,而是很好的做法。这意味着“我实际上知道我在这里做什么,试图将一个 int 存储到一个 char 中”。而
input[i] = c的意思是:“要么我知道我在做什么,这很好,要么我不知道我在做什么,这是一个潜在的错误”。 -
哦!感谢您的提醒
标签: c