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

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

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

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

Q&A

解決済

2回答

365閲覧

文字列のコピーがしたいです

SUNMOON_14

総合スコア20

C

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

0グッド

0クリップ

投稿2021/07/14 07:40

編集2021/07/14 07:41

状況など

C

1#include <stdio.h> 2#include <stdlib.h> 3#include <sys/types.h> 4#include <unistd.h> 5#include <sys/wait.h> 6#include <string.h> 7#define MAXLEN 256 8 9int main(){ 10 char *args[MAXLEN]; 11 char *tmp[MAXLEN]; 12 13(argsに文字列を格納する処理)

例えば
args[0] = md
args[1] = test
args[2] = NULL
などが入っています。
これを
args[0] = mkdir
args[1] = test
args[2] = NULL
とする(以下、この操作を「*」とします。)ために、argsをtmpにコピーしておいて、args[0]をmdからmkdirに書き換えて、残りをtmpからコピーしてくることを考えました。

質問

①そもそも*を実現する方法は上記で良いでしょうか?

②良い場合、どのようにコピーすればよいでしょうか?

C

1int i; 2for(i = 0; args[i] != NULL; ++i){ 3 strcpy(tmp[i], args[i]); 4 } 5 tmp[i+1] == NULL; 6 strcpy(args[0], p->real_name); 7 for(i = 1; args[i] != NULL; ++i){ 8 strcpy(args[i], tmp[i]); 9 }

p->real_name には"mkdir"が格納されています。

③違う場合、どのようにすればよいでしょうか?

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

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

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

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

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

1T2R3M4

2021/07/14 08:41

調べたこと、試したことを追記してください。
guest

回答2

0

ベストアンサー

strcpy(args[0], p->real_name);

これではダメです
args[0]が指してる先に、どれだけの容量が確保してあるのか不明なので、これまた文字列長の不明なものをコピーしたらコケます

まずは、その文字列の格納先を確保し、そこにコピーした後、そのアドレスをargs[0]に代入しましょう

投稿2021/07/14 07:56

編集2021/07/14 07:59
y_waiwai

総合スコア88042

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

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

SUNMOON_14

2021/07/14 13:56

ありがとうございます! args[0] = p->real_name; で解決しました。
guest

0

例えば

args[0] = md
args[1] = test
args[2] = NULL
などが入っています。

どのような状態のことを「入っている」と言っているのかが不明瞭ですが…

C

1//こんなのが別途存在していて… 2char Buffer[サイズ] = "md"; //←ここの配列サイズは "mkdir" を格納できるだけのサイズがある,ということか? 3 4//で,こんなことになってるのか? 5args[0] = Buffer;

argsをtmpにコピーしておいて、args[0]をmdからmkdirに書き換えて、残りをtmpからコピーしてくる

という話はかなり謎です.
「args[0]だけを変更したい」という話に見えますから,操作としては

args[0]をmdからmkdirに書き換えて

だけで終了ではないでしょうか.tmpは何の役割を果たすのでしょう?

投稿2021/07/14 08:15

fana

総合スコア11996

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問