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

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

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

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Q&A

解決済

1回答

9749閲覧

C言語の環境による動作の違いか、バージョンの違いか

godie

総合スコア13

C

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

0グッド

1クリップ

投稿2018/11/12 21:02

編集2018/11/12 22:57

Hacking: 美しき策謀 第2版 ―脆弱性攻撃の理論と実際って本で提供さ入れているubuntuでは正常にgccでコンパイルして動作するのに、自分で準備したlubuntuではエラーが出ます。原因を教えてください。両方VBOXでやってます。 あとどうして\nを入れてないのに改行されているのかわかりません。

#include <stdio.h> #include <string.h> int main() { char str_a[20]; // 20個の要素を持つ文字の配列 char *pointer; // 文字の配列を指すポインタ char *pointer2; // 同じく、文字の配列を指すポインタ strcpy(str_a, "Hello, world!\n"); pointer = str_a; // 1つ目のポインタが配列の先頭を指すように設定する printf(pointer); // 1つ目のポインタが指している文字列を表示する pointer2 = pointer + 2; // 2つ目のポインタは2バイト先を指すように設定する printf(pointer2); // 2つ目のポインタが指している文字列を表示する strcpy(pointer2, "y you guys!\n"); // その場所に他の文字列をコピーする printf(pointer); // 1つ目のポインタが指している文字列を表示する } pointer.c: In function ‘main’: pointer.c:11:4: warning: format not a string literal and no format arguments [-Wformat-security] printf(pointer); // 1つ目のポインタが指している文字列を表示する ^~~~~~ pointer.c:14:4: warning: format not a string literal and no format arguments [-Wformat-security] printf(pointer2); // コード

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

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

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

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

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

y_waiwai

2018/11/12 22:12

提示されてるのはエラーでなくワーニングです。警告なだけなので、コンパイル、実行は正常にできるはずですが
y_waiwai

2018/11/12 22:13

コードはこのままでは見づらいので、質門を編集して、<code>ボタン、’’’の枠の中にコードを貼り付けてください
y_waiwai

2018/11/12 23:16

提示されてるのはワーニングですが、この他になにかエラーが出るんでしょうか。エラーが出るならエラーメッセージを提示してください。
godie

2018/11/12 23:17

わーにんぐのみですね。 printf全てにこのメッセージです
y_waiwai

2018/11/12 23:18

ならそれでコンパイル、実行は正常にできるはずですが。
godie

2018/11/12 23:20

改行はポインタをprintfする勝手にしてくれるのでしょうか。
y_waiwai

2018/11/12 23:21

どこにどう改行されますか?そこらへん詳しく説明しましょう
godie

2018/11/12 23:28 編集

よく読んだら改行問題は解決しました。助けてくださってありがとうございます。
guest

回答1

0

ベストアンサー

これですね。
書式文字列攻撃

コンパイラの違いによる警告ではないかと思います。
まあ警告だし今は学習目的であるなら無視してもよいし、気になるならエラーメッセージに出ている-Wformat-securityをつけてコンパイルすればよいと思います。

あとどうして\nを入れてないのに改行されているのかわかりません。

\n入ってますよ。↓
strcpy(str_a, "Hello, world!\n");
strcpy(pointer2, "y you guys!\n");

それともprintfの書式に入っていないのに、ということでしょうか。
printf(pointer);

printf("Hello, world!\n");
と解釈されて動くので、改行コードが入っていることになります。

投稿2018/11/13 00:07

ttyp03

総合スコア16998

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

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

godie

2018/11/13 10:21

回答ありがとうございます。-Wformat-securityはどこにつけるべきでしょうか
ttyp03

2018/11/13 10:39

こんな感じでしょうか。 > gcc -Wformat-security hoge.c -o hoge 以下でヘルプが出るので参考にしてください。 > gcc --h
godie

2018/11/13 23:19

丁寧な説明をありがとうございます!また困ったら助けてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問