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

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

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

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

3604閲覧

mallocの使い方

Asahi_1115

総合スコア13

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/05/16 06:25

ここに言語を入力ここに言語を入力
コード
//追加修正:gets文の警告がでないようにdefine文を入れる。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 1000
int main( void )
{
char temp[SIZE];
char *p;

printf( "文字列を入力してください" ); gets( temp ); p = malloc( strlen( temp ) + 1 );//追加修正:mallocはvoid型ポインタを返すので、char型ポインタにキャストする。 if ( p == NULL ) { printf( "メモリ確保失敗\n" ); exit( EXIT_FAILURE ); } strcpy( p, temp ); printf( "%s\n", p ); free( p ); /* pの解放 */ return 0;

}
コード

データ数を入力してください>5 データを入力してください>42 データを入力してください>32 データを入力してください>1587 データを入力してください>99 データを入力してください>123 入力データ一覧 42.35.1587.99.123 以上データ数5 ###発生している問題・エラーメッセージ

エラーメッセージ

###該当のソースコード ```ここに言語を入力 ここにご自身が実行したソースコードを書いてください

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答2

0

で質問は?

思い通りに動かないのか
エラーが出るのか
組み方がわからないのか?

その辺書かないと。

投稿2017/05/16 07:11

maiko0318

総合スコア876

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

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

0

ベストアンサー

mallocにて動的にメモリを確保して先頭のアドレスをpに入れています。
数値入力は文字として扱いました。
ポインタの変位をxとして先頭pからのアドレス位置を指すようにしました。

c

1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4#define SIZE 1000 5int main( void ) 6{ 7 char temp[16]; //入力文字は16までとしました。 8 char *p,*bp; 9 int cnt,i,x; 10 11 p = malloc( SIZE + 1 ); 12 if ( p == NULL ) 13 { 14 printf( "メモリ確保失敗\n" ); 15 exit( EXIT_FAILURE ); 16 } 17 18 printf( "データ数を入力してください\n" ); 19 scanf( "%d", &cnt ); 20 21 x=0; //ポインタpからの変位をxとします。 22 for ( i=0; i<cnt; i++ ){ 23 printf( "文字列を入力してください\n" ); 24 scanf( "%s", temp ); 25 26 strcpy( (p+x), temp ); 27 x = x + strlen( temp ); 28 29 if ( i < (cnt - 1) ){ 30 *(p+x) = '.'; 31 x++; 32 } 33 34 *(p+x) = '\0'; 35 } 36 printf( "%s\n", p ); 37 free( p ); /* pの解放 */ 38 return 0; 39}

投稿2017/05/16 10:52

A.Ichi

総合スコア4070

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問