• ベストアンサー

C言語 ナル文字の表示

'\0'(ナル文字)を表示させたいのですがどうすればできますか? str[3] = となって何も表示されません。 str[3] = \0 とはならないんでしょうか? ---プログラム---------------------------- //ナル文字の表示 #include <stdio.h> int main(void){ char str[5] = "abc"; printf("str[0] = %c\n", str[0]); printf("str[1] = %c\n", str[1]); printf("str[2] = %c\n", str[2]); printf("str[3] = %c\n", str[3]); printf("str[4] = %c\n", str[4]); return 0; } ---------------------------- ----実行結果----------------- str[0] = a str[1] = b str[2] = c str[3] = str[4] = ------------------------------------

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1622/5658)
回答No.2

>C言語では、バックスラッシュを端末で表示することが出来ないようです。 バックスラッシュはエスケープ文字になってますのでバックスラッシュを出力したいのでしたら putchar('\\'); のように、エスケープを意味する\の後に、\を書いてください。

purogu2017
質問者

お礼

回答有難うございます。

その他の回答 (3)

回答No.4

"\0"というのは、文字列リテラルとしてNULL文字を設定したい場合に使用するものであって、NULL文字を画面に表示すると"\0"と出てくるわけではありません。TAB文字も、文字列リテラルでは"\t"としますが、画面に"\t"と表示されるわけではありません。 また、printfはNULL文字がくると文字列の終端として処理するため、NULL文字を表示したりはしません。 NULL文字が設定されていることを確認するためには、printfにそのまま渡すのではなく、NULL文字だったら"\\0"を返すような関数を作成するなどの工夫が必要です。

purogu2017
質問者

お礼

回答有難うございます。

  • maiko0333
  • ベストアンサー率19% (840/4403)
回答No.3

ヌルですね。 では"a"はなぜ表示されるのでしょう? 記憶装置には"a"という文字で格納されているわけではありません。 "a"の文字コードが格納されていてそれを"a”という文字に変換して 表示するのです。ヌルは00が格納されていて文字は割り当てられていません。 あと、"abc"とした時、4文字目はNULLですが 5文字目は不定(設定されません)です。

purogu2017
質問者

お礼

回答有難うございます。

noname#232800
noname#232800
回答No.1

ならないと思います。

purogu2017
質問者

お礼

回答有難うございます。

purogu2017
質問者

補足

C言語では、バックスラッシュを端末で表示することが出来ないようです。 putchar('\'); ができませんでした。

関連するQ&A

  • C言語 文字列の操作

    文字Cが含まれる個数を求めたいです #include <stdio.h> int str_chnum(const char str[],int c) { int i; int count=0; for(i=0;str[i]!="\0";i++) if (str[i]==c) count++; return(count); } int main(void) { char st[100]; printf("検索文字列を入力してください:"); scanf("%s",st) ; printf("検索文字列数は%uです。\n",st,int str_chnum(const str[],int c)); return(0); } コンパイルできません。なぜですか?printfの行がたぶん間違っていると思うんですが。。。

  • C言語のint型の配列が分かりません

    #include<stdio.h> int main(void) { int str[ ]={0,1,2} printf("%s\n", str); return 0; } というプログラムをC言語でつくってみましたが動きません.(012と表示されて欲しかったのですが) int str[ ]={1,2,3}の部分をchar str[ ]={'0','1','2'}とすれば動きます. そこで質問なのですが, printf("~%s~", (配列名));  はchar型の配列にしか適応できないのですか? ※追記 puts関数の定義は int puts (const char *str); であるそうなので char型の仮引数にはchar型のアドレスを渡さなければいけません. ではprintf関数の定義は一体どんなものなのですか?

  • C言語の、ポインターの問題を教えて下さい

    C言語の、ポインターを使って大文字と小文字を入れ替えるプログラムを教えて下さい。 作ったのですが、うまくいかず困っています。 分かる方、訂正してください。 よろしくお願いいたします。 #include<stdio.h> void reverse(char *str) { int i; for(i=0;str[i]!='\0';i++) { if(str[i]>=0x61) {str[i]-0x20;} if(0x40<str[i]<0x5B) {str[i]+0x20;} } return(str); } int main(void) { int num; char *str="AddsssEEEEwwwJojoHoih"; printf("Before reverse %s \n",str) str=reverse(str); printf("After reverse %s \n",str); return 0; }

  • C言語の問題が解けません!

    僕は、C言語を勉強しているのですがこの問題の答えがわかりません。 どうか教えてください。 回答お願いします。 ・問題・ 10文字以内の2つの英単語を入力し、アルファベット順で最初にくる単語を表示するプログラムを作りなさい。 /プログラム/ #include<stdio.h> #include<string.h> int main(void) { char str1[256],str2[256]; int i; printf("文字列1は?"); printf("文字列2は?"); return 0; }

  • strrchrについて【C言語】

    このプログラムのp-strの部分は具体的にはどの様な計算をしているのでしょうか?? (xx-xxというふうに) あとint c は char c としなくても良いのでしょうか?? どなたかご教授よろしくお願いいたします<(_ _)> #include <string.h> #include <stdio.h> int main(void) { char str[]= "abcdefghijklmnabcdefghijklmn", *p; int c; printf("検索文字を入力してください。"); c = getchar(); p = strrchr(str, c); if (p != NULL) { printf("%cは文字列の%d番目にあります。\n", c, p-str); printf("以降の文字列は%sです。\n", p); } else printf("%cは見つかりませんでした\n", c); return 0; } 【実行結果例】 検索文字を入力してください。d dは文字列の17番目にあります。 以降の文字列はdefghijklmnです。

  • C言語文字数4つカウント

    こんにちは。大学の課題で「キーボードから入力した文字数に含まれる'h''o''g''e'の4つの文字数をカウントする関数を含むプログラムを完成させよ」という課題がありました。なかなかできず現段階では以下のようになっています。どうすれば問題文のように実行できますか? #include <stdio.h> char str_chnum(const char str[], int ch) { int count = 0; int i; for(i = 0; str[i] != '\0'; i++) { if(str[i] == ch) count++; } return(count); } int main(void) { char str[128]; int ch; printf("文字列を入力してください:"); scanf("%s", str); printf("検索する文字を入力してください:"); scanf(" %c", &ch); printf("%cは%d個ありました。\n", ch, str_chnum(str, ch)); return(0); }

  • c言語についての質問です。

    #include<stdio.h> int main(void){ int a; printf("1文字たいぷしてください。\n"); scanf("%d",&a); if(a>=65 && a<=90){ printf("大文字です。\n"); } else if(a>=97 && a<=122){ printf("小文字です。\n"); } else{ printf("大文字でも小文字でもありません\n"); } return 0; } このプログラムは正しくなくて、 intをchar %dを%cにかえなければなりません。 なぜintはダメなんでしょうか? できれば丁寧に教えてください。 お願いします。

  • C言語 strcmp 半角スペースがあるとだめ?

    C言語 strcmp 半角スペースが文字列に含まれている場合 文字列の比較がうまくいきません。半角スペースがあると比較できないのでしょうか? プログラム //strcmp #include <stdio.h> #include <string.h> int main(void){ char input[256]; char str[] = "HelloWorld!";   //char str[] = "Hello World!";だとうまくいかない。 printf("%s\n>", str); scanf("%s", input); if ( strcmp(input, str) == 0){ printf("同じです。\n"); }else{ printf("違います。\n"); } return 0; }

  • C言語

    文字列を逆順にするプログラムを考えているのですが分かりません。(例)qwerならrewqです。入力終了は、EOFです。考えたのですが、分かりません。(コンパイルエラーです。)教えてください。宜しくお願いします。#include <stdio.h> unsigned str_length(const char str[]) { unsigned len=0; while (str[len]) len++; return (len); } void put_rstring(const char str[]) { unsigned i = str_length(str): while (i-- >0) putchar(str[i]); } int main(void) { char str[30]; int ch; printf("文字列を入力\n"); /* ----この文字列を入力したあとに、Ctrl+Zを押すと、逆から表示               で反対から、文字列が表示----*/ while (1) { ch=getchar(); if (ch==EOF) break; } printf("逆から表示"); put_rstring(str); puts("です。"); return(0); }

  • C言語 文字列操作

    トリム関数とリムーブ関数を作成してみました。改良点はありますでしょうか? ~~~~以下ソース~~~~ #include <stdio.h> #include <stdlib.h> #include <string.h> char *Trim(char *str); char *Remove(char *str, char *rmv); void main(void) {  char str[10], rmv[10], *p;  int c;  /* " abcd "をトリムする */  strcpy(str, " abcd ");  printf("トリム前 |%s|\n", str);  p = Trim(str);  printf("トリム後 |%s|\n", str);  /* 指定文字列を削除する */  printf("削除する文字列を入力してください :");  scanf("%s", rmv);  Remove(str, rmv);  printf("削除後 |%s|\n", str);  exit(0); } char *Trim(char *str) {  char space[] = " ";  char null[] = "";  int index = 0;  while(1){   if(strcmp(&(str[index]), null) == 0){    index--;    if(strncmp(&(str[index]), space, 1) == 0){     strcpy(&(str[index]), &(str[index]) + 1);    }else{     break;    }   }else{    if(strncmp(&(str[index]), space, 1) == 0 && index == 0){     strcpy(&(str[index]), &(str[index]) + 1);    }else{     index++;    }   }  }  return str; } char *Remove(char *str, char *rmv) {  int c, size, i;  char *p;  c = '\0';  p = strchr(rmv, c);  size = p - rmv;  for(i = 0; i < size; i++){   c = (int)rmv[i];   p = strchr(str, c);   if (p != NULL) {    strcpy(&(str[p-str]), p + 1);   }   else{    printf("""%c""は見つかりませんでした\n", c);   }  }  return str; }

専門家に質問してみよう