#include <stdio.h>
int main()
{
char s[] = "churchgate: no church no gate";
char t[25];
char *ss, *tt;
ss = s;
while (*ss != '\0')
*tt++ = *ss++;
printf("%s\n", t);
return 0;
}
这段代码有什么问题? 当我试图运行它。它显示了一些垃圾值。
答案 0 :(得分:3)
你永远不会指出tt
。您需要将其指向t
:
tt=t;
答案 1 :(得分:3)
tt
初始化为t
答案 2 :(得分:1)
在内存中试验任意位置会很有趣,如果你想要一个定义的行为,就必须定义访问目标。
在对它进行操作之前,必须指向内存空间中的某个已定义区域。*tt++ = *ss++;
s
是30个字节。 t
,如果您想要用于tt
的那个是25。
答案 3 :(得分:0)
几个问题:
1)“tt”从未初始化,
2)“s []”可能 READ ONLY (取决于编译器/平台)!!!!!
建议:
#include <stdio.h>
#define MAX_STRING 80
int
main()
{
char s[MAX_STRING] = "churchgate: no church no gate";
char t[MAX_STRING];
char *ss = s, *tt = t;
while (*ss)
*tt++ = *ss++;
*tt = '\0';
printf("%s\n", t);
return 0;
}
答案 4 :(得分:0)
几种可能性,例如G:
#include <stdio.h>
int main()
{
char s[] = "churchgate: no church no gate";
char t[25];
char *ss, *tt;
for (ss=s, tt=t; *ss != '\0' && tt-t < sizeof(t)-1; ss++, tt++)
*tt = *ss;
}
*tt = '\0';
// or just use strncpy.
// strncpy doesn't copy the \0 if the size is reached,
// so account for that.
strncpy(t, s, sizeof(t)-1);
t[sizeof(t)-1] = '\0';
printf("%s\n", t);
return 0;
}
您从其他答案中了解到主要问题:
tt
未初始化t