0

「はじめまして!」という文字列があり、最初の文字なしで「はじめまして!」だけで印刷したいとします。

私は次のようにしようとしましたが、コンパイルして実行した後、プログラムは自動的に閉じます。

#include <stdio.h>

int main(void)
{
 char *s = "nice to meet you!";

 printf("Original string: %s\n",*s);

 printf("Pointer plus one gives: %s\n", *(s+1));

 return 0;
}

プログラムの何が問題になっていますか?

4

6 に答える 6

6

sではなく印刷する必要があります*s

%s フォーマット トークンはポインタを必要とします。 sは文字列へのポインタですが、 は文字列*sの最初の文字の値です。 printf("%s", *s)文字列の最初の文字の文字コードのアドレスから始まる文字列を出力します。このアドレスはプロセスに対して有効ではない可能性が高いため、未処理の例外が発生します。

于 2012-09-25T12:21:35.403 に答える
3

*s はポインターを逆参照し、結果は char になります。したがって、次のことを試してください。

#include <stdio.h>

int main()
{
 char *s="nice to meet you!";

 printf("Original string: %s \n",s);
 printf("Original first char: %c\n", *s);

 printf("Pointer plus one gives: %s\n", (s+1));

 return 0;
}

違いを見るために。

よろしく

于 2012-09-25T12:25:27.567 に答える
2

うーん、文字列へのポインターではなく、文字列のポインターへのポインターを使用します(printfを使用)。試す

printf ("aaa %s bbb\n", s ); 

また

printf ("aaa %s bbb\n", s+1 ); 
于 2012-09-25T12:22:22.940 に答える
1

私は次のようにしようとしましたが、コンパイルして実行した後、プログラムは自動的に閉じます。

ターミナルを介してプログラムを実行します。プログラムをコンパイルして実行するために何を使用していますか?

プログラムの何が問題になっていますか?

※(s+1)は1文字です。

于 2012-09-25T12:23:50.153 に答える
0

コードはあなたが指示したことを正確に実行しています。おそらく、あなたが何をするように指示しているのか理解していないと思います.

char *s = "nice to meet you!";

// s is a pointer to a character
// s* is the character that "s" points to

s文字「n」を指しています。sまた、NULL で終了する文字列リテラルの最初の文字を指している場合もあります。

printf("Original character: %c\n",*s); //Note the %c, we're looking at a character
output-> Original character: n

printf("Original string: %s\n",s); //Note the %s, and we're feeding the printf a pointer now
output-> Original string: nice to meet you!

オフセットに関しては:

*s     = the character s is pointing at, 'n'
*(s+1) = the next character s is pointing at, 'i'

対:

s     = the address of the string "nice to meet you"
(s+1) = the address of the string "ice to meet you"
于 2012-09-25T13:59:29.667 に答える
0

これを試してください。文字列で dowhatopwant 関数を使用してください。

void my_putchar(char c)
{
  write(1, &c, 1);
}

void dowhatopwant(char *str)
{
  int cnt = 1;
  while (s[cnt])
  {
     my_putchar(s[cnt]);
     cnt++;
  }
}
于 2012-09-25T12:26:00.853 に答える