CかC++のプログラムで、文字配列をリセットしたいのでそういった関数を探してみました。
ネットで探したのですが、いくつかのサイトでstrsetという関数が紹介されていました。これは、strset(リセットしたい文字列,入れたい文字)という風に使うようです。
それで実際にソースに書いてコンパイルしたのですが、この関数は定義されてないらしく、認識してくれません。
(インクルードファイルは<stdio.h>,<stdlib.h>,<string.h>を使いました)
確かに聞いたことの無い関数だし、何冊かの本を見ましたがどこにもありません。
この関数はなにか特別な条件でないと使えないのでしょうか??

ちなみに、私がやろうとしたことは
char moji[] = "aiueo"と、aiueoが入った文字列mojiの中身を、
strset(moji," ")として空白にしたかったのです。

strsetの他に、文字列の中身を好きな文字で埋められるような関数ってありませんか?ご存知の方、教えて下さい。

このQ&Aに関連する最新のQ&A

配列 文字」に関するQ&A: 文字配列について

A 回答 (4件)

strset って DOS/Windows 系でしか使えないです。


あとは、strset(moji, " " → ' '); の間違いとか?
    • good
    • 0
この回答へのお礼

strsetはUNIX上じゃ動かないって事ですか…どうりで動かないはずです。
だからあまり文献に載ってないのでしょうか。
どうもありがとうございました。

お礼日時:2002/01/23 01:09

 補足です。



 通常は strcpy ですね。
 使い方は、

   strcpy( moji, " " );

 です。
    • good
    • 0
この回答へのお礼

ありがとうございました。
strcpyを使うと簡単ですね…
参考になりました。

お礼日時:2002/01/23 01:07

#1の訂正と捕捉です。



最初のやつ
char* p = moji;
while (*p) {
*p = ' ';
p++; /* 追加 */
}

2番目。
mojiを'\0'で締めましょう。
例えば次のように。
int i, size;
size = sizeof(moji);
for (i = 0; i < size; i++) {
moji[i] = ' ';
}
moji[size-1] = '\0';

3番目。
2番目と同様。
memset(moji, ' ', sizeof(moji)-1);
moji[sizeof(moji)-1] = '\0';
(memsetってWindowsではないかも?)
訂正だらけで申し訳ありません。
    • good
    • 0
この回答へのお礼

いろいろ考えてくださってありがとうございます。
参考になりました。
そういえばmemsetってありましたね。
C++だけの関数だと勝手に思ってて、Cでも使えるとは知りませんでした。
unix上で動かしてるのでmemsetを使ったらうまくいきました。

お礼日時:2002/01/23 01:02

char* p = moji;


while (*p) {
*p = ' ';
}
はどうでしょう?
int i;
for (i = 0; i < sizeof(moji); i++) {
moji[i] = ' ';
}
でもいいかも。
あるいは
memset(moji, ' ', sizeof(moji));
とか。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC言語のプログラムで#includeを使わず#includeだけで

C言語のプログラムで#include<math.h>を使わず#include<stdio.h>だけで√(sqrt)を表現することは可能でしょうか?

Aベストアンサー

ご自分で sqrt 関数を作れば可能です。
こんな感じでしょうか。

#include <stdio.h>

static double
sqrt (double s)
{
 double x = s / 2.0;
 double last_x = 0.0;

 while (x != last_x)
 {
  last_x = x;
  x = (x + s / x) / 2.0;
 }

 return (x);
}

int
main (int argc, char * argv[])
{
 printf ("sqrt (%f) = %f\n", 3.0, sqrt (3.0));
}

Q#include

#include <stdio.h>の <> の意味と
#include "xxxxx.h"の "" の意味を教えてください。

Aベストアンサー

厳密な定義を、「JIS X3010:2003 - 6.10.2 ソースファイル取り込み」から引用します。

---- 引用ここから ----
制約 #include指令は, 処理系で処理可能なヘッダ又はソースファイルを識別しなければならない。
意味規則 次の形式の前処理指令
    # include <h文字列> 改行
は, 処理系定義の場所を順に探索して, <区切り記号と>区切り記号の間で指定した文字列で一意に決まるヘッダを見つけ, そのヘッダの内容全体でこの指令を置き換える。どのようにして探索の場所を指定するか, またどのようにしてヘッダを識別するかは, 処理系定義とする。
 次の形式
    # include "q文字列" 改行
は, 二つの"区切り文字の間で指定した文字列で一意に決まるソースファイルの内容全体で, この指令を置き換える。指定したソースファイルの探索順序は処理系定義とする。この探索をサポートしていない場合, 又は探索が失敗した場合, 同じ文字列(もしあれば>文字を含めて)を含む次の知れに読み替えたのと同じ規則で再処理する。
    # include <h文字列> 改行
---- 引用ここまで ----

要するに、<xxx>の場合は処理系定義のヘッダ(ファイルとは限らない)を取り込み、"xxx"の場合はソースファイルを取り込むということです。いずれも探索場所やその順序は処理系定義です。

よくある誤解は、
・ヘッダは必ずファイルである。
・"xxx"ではカレントディレクトリや取り込もうとしたファイルと同じディレクトリから探索を始める。
といったものです。このように実装されている処理系が多いことは確かですが、標準規格ではそのような規定はありません。
使用している処理系がどのような実装になっているかは、マニュアルに記載があるかと思います。

厳密な定義を、「JIS X3010:2003 - 6.10.2 ソースファイル取り込み」から引用します。

---- 引用ここから ----
制約 #include指令は, 処理系で処理可能なヘッダ又はソースファイルを識別しなければならない。
意味規則 次の形式の前処理指令
    # include <h文字列> 改行
は, 処理系定義の場所を順に探索して, <区切り記号と>区切り記号の間で指定した文字列で一意に決まるヘッダを見つけ, そのヘッダの内容全体でこの指令を置き換える。どのようにして探索の場所を指定するか, またどのようにして...続きを読む

Q   #include

   #include<stdio.h>
#include<math.h>

int main(void)
{
int i,n,limit;
printf("data? ");
scanf("%d",&n);
i(n>=2){
limit=int)sqrt(n);
for(i=limit;i1;i--){
if(n%i==0)
break;
}
if(i==1)
printf("素数\n);
else
printf("素数でない\n");
}
return 0;
}

というプログラムがあるのですが、それを改良して int型(符号付32ビット整数)および、unsigned int型(符号なし32ビット整数)のそれぞれの最大の素数を求めよという問題があり、ただし、エラトステネスのふるいは使わずに、上のプログラムを改良してみよという問題がどっかにあったんですが、全然わからないので、教えてください。

   #include<stdio.h>
#include<math.h>

int main(void)
{
int i,n,limit;
printf("data? ");
scanf("%d",&n);
i(n>=2){
limit=int)sqrt(n);
for(i=limit;i1;i--){
if(n%i==0)
break;
}
if(i==1)
printf("素数\n);
else
printf("素数でない\n");
...続きを読む

Aベストアンサー

最初に。
このプログラム、ところどころ打ち間違いがあります。直しておきましょう。
i(n>=2){
limit=(int)sqrt(n);
for(i=limit;i>=1;i--){

まず、プログラムを、機能ごとに分けて考えます。

printf("data? ");
scanf("%d",&n);
が素数判定する数値nを決めるところ

if(n>=2){
から return 0 ; の前の
}
までがn が素数かの判定しているところ
です。

では、改造に入ります。
intの範囲での最大の素数、ということなので、 intの最大値 から順番に素数判定を行い、最初に見つかった素数が、求める値、となります。

元はnをキーボードから入力しています。
これをキーボード入力ではなく、プログラム中で「intの最大値 から順番に」するには、どうしたらいいと思いますか?

元の判定部は
if(i==1)
printf("素数\n);
else
printf("素数でない\n");
です。これは n に対して「素数/素数でない」と表示されます。
改造するときに
・「素数でない」という表示は必要でしょうか?
・「素数」という表示ではnはわかりません。 nも表示するにはどうしたらいいと思いますか?
・素数が見つかったら、ループを抜けないと、int型の全ての素数を表示するプログラムになってしまいます。ループを抜けるにはどうしたらよいでしょうか?

以上の考えかたで、改造できると思いますが、いかがでしょうか。

unsigned int版へは次の2点を変更します。
・計算に使う変数はunsigned intにする必要がある。
・nはunsigned intの最大値から順番に

最初に。
このプログラム、ところどころ打ち間違いがあります。直しておきましょう。
i(n>=2){
limit=(int)sqrt(n);
for(i=limit;i>=1;i--){

まず、プログラムを、機能ごとに分けて考えます。

printf("data? ");
scanf("%d",&n);
が素数判定する数値nを決めるところ

if(n>=2){
から return 0 ; の前の
}
までがn が素数かの判定しているところ
です。

では、改造に入ります。
intの範囲での最大の素数、ということなので、 intの最大値 から順番に素数判定を行い、最初に見つかった素数が...続きを読む

Q#include

#include <stdio.h>

struct st
{
char a[3];
short b;
char c[7];
long d;
char e[5];
};

int main(void)
{
printf("%d\n",sizeof(struct st));
return 0;
}

コンパイルオプションでアライメントを変化させながら(1,2,4,…)
sizeof(struct st)の変化を見たいのですが、コンパイルする時に
どのようにすれば良いのでしょうか?当方、gccを使用しております。

あと、ついでなんですが、警告オプションは-Wと-Wallしかないのでしょうか?

Aベストアンサー

GCCのマニュアル
http://gcc.gnu.org/onlinedocs/index.html
日本語訳は古いバージョンのしか見つからなかった。

> アライメントを変化させながら
http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable-Attributes

コンパイラオプションでやるなら、-Dでマクロを使うなりして。
インテルプロセッサだと
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options

> -mpreferred-stack-boundary=num
> -mincoming-stack-boundary=num
というあたりも関係あるかも

>警告オプションは-Wと-Wallしかないのでしょうか
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/Warning-Options.html#Warning-Options

GCCのマニュアル
http://gcc.gnu.org/onlinedocs/index.html
日本語訳は古いバージョンのしか見つからなかった。

> アライメントを変化させながら
http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable-Attributes

コンパイラオプションでやるなら、-Dでマクロを使うなりして。
インテルプロセッサだと
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options

> -mpreferred-stack-boundary=num
> -mincoming-stack-boundary=num
とい...続きを読む

Q#incledeの内容を見たい

 今晩は、Cの初心者です、宜しくお願いします。

 Cのコードの最初に「#inclede<stdio.h>」と書きますが、このファイル?を実際に見るのはどのようにしたら
見ることが出来るのでしょうか。
 宜しくお願いします。

Aベストアンサー

あくまで一例ですが、GNU C Library

GNU C Library:
http://www.gnu.org/software/libc/

の場合は次のようになってる模様です。

stdio.h:
http://www.google.co.jp/codesearch/p?hl=ja&sa=N&cd=1&ct=rc#HT3Jwvgod1I/glibc-2.5/libio/bits/stdio.h&q=stdio.h

あくまで参考程度に、です。全てのコンパイラがこれで実装してるとは限らないので。


人気Q&Aランキング

おすすめ情報