字符串代码显示错误?

时间:2012-11-12 20:09:20

标签: c string

#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;  
}  

这段代码有什么问题? 当我试图运行它。它显示了一些垃圾值。

5 个答案:

答案 0 :(得分:3)

你永远不会指出tt。您需要将其指向t

tt=t; 

答案 1 :(得分:3)

  1. 您忘了将tt初始化为t
  2. 你的阵列太小了。
  3. 您忘记了null终止阵列。

答案 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;  
}

您从其他答案中了解到主要问题:

  1. tt未初始化
  2. 无法检查t
  3. 复制后没有0终止