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

このコードの問題は何ですか? 実行しようとすると。いくつかのガベージ値が表示されます。

4

5 に答える 5

3

あなたは何も指さないtt。あなたはそれを指す必要がありますt

tt=t; 
于 2012-11-12T20:11:00.573 に答える
3
  1. あなたはに初期化するのを忘れましttt
  2. 配列が小さすぎます。
  3. 配列をnullで終了するのを忘れました。
于 2012-11-12T20:12:04.787 に答える
1

定義された動作が必要な場合は、アクセスのターゲットを定義する必要がある場合は、メモリ内の任意の場所で実験するのが楽しい場合があります。

ttは、操作を行う前に、メモリ空間内の定義された領域に向ける必要があります。

*tt++ = *ss++;

s30バイトです。t、それがあなたが使用したいものである場合ttは25です。

于 2012-11-12T20:15:41.173 に答える
0

いくつかの問題:

1) "tt" が初期化されていない。

2) "s[]" は読み取り専用の場合があります(コンパイラ/プラットフォームによって異なります)!!!!!

提案:

#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;  
}  
于 2012-11-12T20:14:03.567 に答える
0

いくつかの可能性、例えば:

#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. コピー後のゼロ終了なし
于 2012-11-12T20:33:44.507 に答える