質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

Q&A

解決済

2回答

824閲覧

scanfでの文字列の受け渡しについて

yoyuhihami

総合スコア26

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

0グッド

0クリップ

投稿2021/12/12 00:48

scanf関数で文字列の受け渡しをするときにエラーメッセージが表示されました

発生している問題・エラーメッセージ

SIGSEGV on thread : 1155903488

該当のソースコード

c言語

1char n; 2scanf("%s", &n);

試したこと

scanfの&を付け直してみたりしました。

補足情報(FW/ツールのバージョンなど)

家のパソコンはOSがWindows vistaで、お金もできる限り使いたくなかったので、プログラミングはiPad 第三世代を使っていて、アプリケーションは無料のMobile Cというアプリを使っています。なのでwindows固有の<Windows.h>は使えません。できることが限られていてすみません、、、

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1T2R3M4

2021/12/12 00:52

入門書やサイトを利用して勉強してみてはいかがでしょうか。
dodox86

2021/12/12 01:32

プログラミングの勉強が目的であれば、非力なPC、マシンでも工夫すれば結構色々できます。何となくコードを書いてみるのではなく、基本の部分をちゃんと学びましょう。
cx20

2021/12/12 06:11

■ モバイルC – スマートフォンでC言語が使えるアプリ https://parity-blog.info/mobilec/ > C(コンパイラ:CPP1.2.10、Clang6.0.0) Clang 6.0.0 は gcc 4.2.1 相当のようです。特段、C言語の勉強の用途としては遜色ないレベルだと思います。(タブレットだとソフトウェアキーボードなので入力しづらいというのはあるかもしれませんが・・)
cx20

2021/12/12 06:20

余談ですが、iPadに「モバイルC」を入れて試した所、OpenGL ES(組み込み用のOpenGL規格)もサポートしているらしく、3Dグラフィックスもいけました。 Windows固有の機能は使えませんが、結構色々できるようなので「できることが限られている」ということは無さそうです。
guest

回答2

0

ベストアンサー

char では1文字しか入りません
文字列ではないですねー

投稿2021/12/12 01:32

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoyuhihami

2021/12/12 02:50

char *n; として見ましたがダメでした
y_waiwai

2021/12/12 04:28

ポインタにしたところで、その中身の文字列(文字配列)を入れる場所を確保しないとだめですやん。 n=malloc(256); ってのをハメときましょう
yoyuhihami

2021/12/12 05:23

成る程。ありがとうございます。 しかし #include <stdio.h> int main(void){ char *n; n=malloc(256); scanf("%s", &n); printf("%s", n); } とすると test.c(5) : error : malloc : No symbol found. というふうに出てしまいます。 この環境ではどうやら出来ないようです
cx20

2021/12/12 05:30

> test.c(5) : error : malloc : No symbol found. malloc() を使うには #include の追加が必要です。 ----------------------- #include <stdlib.h> -----------------------
y_waiwai

2021/12/12 05:33 編集

malloc を使うには、stdlib.h をインクルードする必要があります https://daeudaeu.com/c_malloc/ それと、 scanf("%s", n); としましょう
yoyuhihami

2021/12/12 05:43

ありがとうございます。 しかし #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void){ char n; n=malloc(256); scanf("%s", n); printf("%s", n); } としても abcdefg SIGSEGV on thread : 1090498560 と出てきました
yoyuhihami

2021/12/12 05:46

ただし test.c(5) : error : malloc : No symbol found. というのは出なくなりました。
y_waiwai

2021/12/12 05:53

あああ、みおとしてました char n; じゃなくて、 char *n; ね #こうコケるんちゃうんか、、という予想通りにコケてますね
yoyuhihami

2021/12/12 05:55

その通りにやったら出来ました!! ありがとうございました。
guest

0

%s は文字列のための書式指定。
文字列は末端に'\0'を付加するので、たとえ1文字入力でも2文字分の領域を確保しておかなければならない。
なので

char n; // 1文字分の領域では足りない。
scanf("%s", &n);

投稿2021/12/12 01:06

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoyuhihami

2021/12/12 06:56

ありがとうございました。
episteme

2021/12/12 07:00 編集

char n[100]; scanf("%s", n); ならnに('\0'を含め)長さ100以下の文字列を格納できる。 # mallocの必要はない
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問