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と関連する良く見られている質問

QVC++6.0からVC++.NETへの変遷について

VC++がようやく分かり出したこの頃ですが、今日本屋に立ち寄ったら、なっ なんとVC++の本がほとんど無くなり、代わりにVC++.NETとVC#ばかりになっていました。

C#はVC++とは違うと聞いていたのですが、読んでみるとVC++.NETもかなり違ってました。
(かなり違うという表現は、各人の状況により意見が異なると思いますが)

私のような本を見ながらコードを打って勉強している初心者にとって、VC++.NETの本ではVC++6.0を動かすことができません。

今から勉強する人や本を買って勉強しようとしている人あるいは、コンパイラを手に入れようとしている人はVC++.NETに移行してしまわざるを得ないのでしょうか?

すでにVC++6.0を十分活用出来ている人も、時代の流れでNETやC#を勉強していかなければならないのでしょうか?

つまり、単なるバージョンアップとは一線をなす変更がなされたということなのでしょうか?

良くご存知の方見解をお願いします。

Aベストアンサー

すぐにではありませんが、.NETに移行せざるを得なくなるでしょうね。
ただ、開発環境という面では、VS.NETにはC++が含まれており、C++の部分は
従来のC++も利用できるようになっていて、これはアンマネージC++と呼ばれています。
C++で.NETのコードを作成する時は、マネージC++という拡張仕様で記述します。
また、従来のコードと.NETフレームワーク用コードを混在させてアプリケーションを
開発することもできます。これは、相互運用という形で説明されています。

ということですので、C++で習得したものが無駄になることはありません。
たぶん、.NET環境の開発には、C++よりもC#やVB.NETを利用することが
多くなると思いますが、C++を理解していることはプラスにはなってもマイナスには
なりませんので、頑張って下さい。

.NET関連のサイトを2つご紹介しておきます。ご参考に。
http://www.microsoft.com/japan/msdn/library/default.asp
http://www.atmarkit.co.jp/fdotnet/index.html

すぐにではありませんが、.NETに移行せざるを得なくなるでしょうね。
ただ、開発環境という面では、VS.NETにはC++が含まれており、C++の部分は
従来のC++も利用できるようになっていて、これはアンマネージC++と呼ばれています。
C++で.NETのコードを作成する時は、マネージC++という拡張仕様で記述します。
また、従来のコードと.NETフレームワーク用コードを混在させてアプリケーションを
開発することもできます。これは、相互運用という形で説明されています。

ということですので、C++で習得したもの...続きを読む

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));
}

QVC++とVC#の違いを教えて下さい

VC++とVC#どちらを勉強したほうが就職に有利でしょうか
VC++とVC#何がちがうのでしょうか。
VC++は主に業務系アプリを作成するときに使う言語で
VC#は主に制御系アプリを作るときに作成する見たいな
違いも教えて下さい。

Aベストアンサー

> VC++とVC#どちらを勉強したほうが就職に有利でしょうか

どちらでも大した差はないと思いますが、VC++の方が応用範囲は広くなると思います。VC++をVC#をという視点ではなく、プログラミング言語としてC/C++, C#を、プラットフォームとしてWindowsのプログラミングを、.NETフレームワークを、という視点で勉強することをお勧めします。

> VC++とVC#何がちがうのでしょうか。

VC++はC++をベースにしていますが、マイクロソフト社の独自仕様がかなり入っています。.NET Frameworkなしでも動くプログラムをかけます。一方、C#は比較的新しい言語で文法的にはJavaに似ており、.NET Frameworkを前提に作られています。

.NET Frameworkを使うのであれば、VC++, VB, C#のどれを使っても出来ることは一緒です。

私は、自分で使うちょっとしたツールを作る時は C#を使い、使用環境の制約上 .NET Frameworkが使えないものや、ドライバを開発する場合、サンプルプログラムとしてソースコードを開示する場合にはVC++を使っています。

ちなみに、マイコン上で動作する制御用プログラムを開発する場合はどちらも使えず、H8マイコンやSHマイコンではHEW(ルネサスの統合開発環境)にGCCやルネサスのC/C++コンパイラを使って、C言語でプログラムを開発しています。

> VC++とVC#どちらを勉強したほうが就職に有利でしょうか

どちらでも大した差はないと思いますが、VC++の方が応用範囲は広くなると思います。VC++をVC#をという視点ではなく、プログラミング言語としてC/C++, C#を、プラットフォームとしてWindowsのプログラミングを、.NETフレームワークを、という視点で勉強することをお勧めします。

> VC++とVC#何がちがうのでしょうか。

VC++はC++をベースにしていますが、マイクロソフト社の独自仕様がかなり入っています。.NET Frameworkなしでも動くプログラムを...続きを読む

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文字列> 改行
は, 処理系定義の場所を順に探索して, <区切り記号と>区切り記号の間で指定した文字列で一意に決まるヘッダを見つけ, そのヘッダの内容全体でこの指令を置き換える。どのようにして探索の場所を指定するか, またどのようにして...続きを読む

QVC++6で作成したDLLをVC++.NET2003から呼び出せますか

現在、VC++.NET2003で作成しています。あるメーカから提供されているDLLがあるのですが、そのDLLとのリンクまではできたのですが、実行するとエラーになってしまいます。
(プログラムが異常終了するのではないのですが、そのDLLからの戻り値がエラーになり、期待した結果が得られません。)
そのDLLはVC++6で作成したものらしく、マニュアルには、VC++6で作成したアプリケーションからの呼び出し方法が、記述されていました。
VC++6でアプリを作成すれば、正常に呼び出せることは明白なのですが、いかんせん、VC++.NET2003での開発が、ある程度進んでしまっていますので、いまからVC++6に切り替えるわけにもいきません。
それで、一般論として、確認したいのですが、VC++6で作成したDLLをVC++.NET2003で使用することは、出来ないのでしょうか。(これから、メーカにも確認する予定ですが、まずは、こちらで確認したく、投稿した次第です)

Aベストアンサー

> もし、原理的にVC++6のDLLをVC++.NETでも呼び出し可能なら、

呼び出すだけなら原理的には可能ですが、作り方次第では正しく動作しないと思います。
典型的なまずい例は、DLL側でmallocやnewなどで割付けたオブジェクトを呼び出し側で解放させる、またはその逆です。

結局のところ、DLLの作り方に強く依存しますので、想像だけではこれ以上分かりません。

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の最大値 から順番に素数判定を行い、最初に見つかった素数が...続きを読む

QC#とVC++.NETについて教えて下さい。

質問タイトルが漠然としててごめんなさい。
特別なソフトを作る訳ではないのですが、暇プロレベルで最近やっと
苦労の末、.NET以前のVC++を理解できて、VC++ってMFC
を使う為の言語のだなーと思っている感じです。
C#は購入済みですが、まだ触ってません。VC++.NETは未購入
の状態です。

そこで質問なのですが、
 (1)WIN32アプリにはC#とVC++.NETどちらが適していますか?
 (2)VC++.NETはやはりMFC寄りの言語なのでしょうか?

インラインアセンブルとかもやりたいのですが、
 (3)VC++.NETではできますか?C#では?

C#は見た目がC言語でクラスも使えるのでVC++.NETとどう違う
のか良くわかりません。自分的にはC言語でなんでもやって行って、
C++はクラスが分かる程度で良しとしようと思っています。
詳しい方、漠然とした質問で申し訳ございませんが、ご教授お願いします。

Aベストアンサー

「VC++.NET」と書かれていますが
「Visual C++.NET 2003」及び「Visual C++.NET 2002」の事でしょうか?
2005からは「Visual C++ 2005」という表記になり表記から「.NET」ははずれました。
それと.NET Frameworkという言葉をご存知でしょうか?
C#は.NET Frameworkを使ったアプリケーションを作る為の言語です。

(1)
Win32APIを使ってプログラムをするなら普通VC++を使います。
C#はWin32APIの代わりに.NET Frameworkを使います。

(2)
従来通りMFCが使えます。(MFCのバージョンも上がっています。)
それとは別にC++から.NET Frameworkを使える
C++/CLIといものも選択できます。(2003ではマネージドC++と呼ばれていました)
(.NET Frameworkを使ったソフトを動かすには.NET Frameworkのランタイムが必要になります。)

(3)
VC++はインラインアセンブラを使うことが可能です。
C#はそんなに詳しくないですが多分無理です。
その代わりunsafeコード(インラインCみたいなもの)が使えます。

>C#は見た目がC言語でクラスも使えるのでVC++.NETとどう違う
>のか良くわかりません。
C#とC/C++はまったく違う言語です。例えばC#は基本的にポインタはありません。クラスの多重継承もできません。
単純なステートメント(文構造)が同じなだけです。
それならC++とJavaもステートメントは似ているといえます。

「VC++.NET」と書かれていますが
「Visual C++.NET 2003」及び「Visual C++.NET 2002」の事でしょうか?
2005からは「Visual C++ 2005」という表記になり表記から「.NET」ははずれました。
それと.NET Frameworkという言葉をご存知でしょうか?
C#は.NET Frameworkを使ったアプリケーションを作る為の言語です。

(1)
Win32APIを使ってプログラムをするなら普通VC++を使います。
C#はWin32APIの代わりに.NET Frameworkを使います。

(2)
従来通りMFCが使えます。(MFCのバージョンも上がっていま...続きを読む

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
とい...続きを読む

QVC++プログラマーのアルバイトを未経験可、年齢不問で探しているのです

VC++プログラマーのアルバイトを未経験可、年齢不問で探しているのですが…
現在年齢は42歳です。
5~6年前からC言語を勉強し始め、現在はC++やVC++(MFC)を勉強するまでになったのですが、VC++プログラマーのアルバイトで雇ってくれる会社はありますか?
同じ未経験で入社するには若い人に比べて年齢でハンデがある分をスタートラインで差を付けようと思い、今でもVC++(MFC)の勉強を続けているのですがこれはあまり意味のないことですか?

Aベストアンサー

アルバイトということですが、どのような仕事をしたいのでしょうか?
単なるコーディングのみをやりたいのか、上流工程も含めた開発全体を経験したいのか質問内容からは読み取れません。
40代ということであれば、企業が求めるのは即戦力になる人ではないでしょうか?
プログラマーというよりは、システムエンジニアとして設計業務やマネジメントができる人が求められると思います。
仕事については、VC++(MFC)の開発業務の需要がどれだけあるかによると思います。
VC++にこだわるのであれば、VC++.netも挑戦したほうがアドバンテージがあると思います。
勉強しているから採用されると思っているなら、考えは甘いと思います。
企業は、どれだけVC++を使ってソフト開発を行ってきたかを見ると思います。
ここで質問するよりは、ハローワークや転職者向けの会社説明会などで質問したほうが良いと思います。

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ランキング