【初心者歓迎】C/C++室 Ver.26【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/03/29(水) 11:59:26ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.25【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1140963340/l50
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0951デフォルトの名無しさん
2006/05/09(火) 00:41:42main(){ puts("数値*数値*数値=積"); }
0952デフォルトの名無しさん
2006/05/09(火) 00:47:37それだと、SCANF関数とやらを使っていない
0953945
2006/05/09(火) 00:50:20もう明日から会社来なくていいよ
0954デフォルトの名無しさん
2006/05/09(火) 00:52:120955デフォルトの名無しさん
2006/05/09(火) 00:54:580956デフォルトの名無しさん
2006/05/09(火) 01:01:430957デフォルトの名無しさん
2006/05/09(火) 01:03:35宿題はこっち↓
C/C++の宿題を片付けます 64代目
http://pc8.2ch.net/test/read.cgi/tech/1146323457/
まぁその質問内容じゃ無理だろうけど。
0958デフォルトの名無しさん
2006/05/09(火) 01:03:53エスパーの登場キボンヌ。
0959デフォルトの名無しさん
2006/05/09(火) 01:14:320960デフォルトの名無しさん
2006/05/09(火) 01:39:29だからスレ違いの質問に構うなって。のうたりんか君は。
0961デフォルトの名無しさん
2006/05/09(火) 03:16:17仮引数で返却するようにしたいのですが、下記プログラムだとstringにNULLが返却されます。
malloc()で確保した領域は上位引数に返る際に解放されてしまうのでしょうか。
#include<stdio.h>
#include<stdlib.h>
void hoge(char *string);
int main(void)
{
char *string = NULL;
hoge(string);
printf("%s\n",string); /* nullが表示される */
return 0;
}
void hoge(char *string)
{
string = (char*)malloc(4);
string[0] = 'a';
string[1] = 'b';
string[2] = 'c';
string[3] = '\0';
return;
}
0963デフォルトの名無しさん
2006/05/09(火) 03:18:51何も返却されていない。
0964デフォルトの名無しさん
2006/05/09(火) 03:21:130965デフォルトの名無しさん
2006/05/09(火) 10:33:370966デフォルトの名無しさん
2006/05/09(火) 11:56:11char *string = NULL;
hoge(string); /* ここで渡しているのは NULL */
hoge(char *string)
{
string = (char*)malloc(4); /* ここで書き換えているのは hoge ローカルの string */
string[0] = 'a';
main の string を書き換えるなら、そのポインタを渡すべき。
char *string = NULL;
hoge(&string); /* ここで渡しているのは string へのポインタ */
hoge(char **string)
{
*string = (char*)malloc(4); /* ここで書き換えているのは main の string */
(*string)[0] = 'a';
0967デフォルトの名無しさん
2006/05/09(火) 12:51:18extern char *alloc_hoge();
extern char free_hoge(char *string);
int main(void)
{
char *string = alloc_hoge(); /* 確保 */
/*いろいろ処理*/
free_hoge(string); /* 後始末 */
}
char *alloc_hoge()
{
char *string = (char*)malloc(4);
/*いろいろ代入*/
return string;
}
char free_hoge(char *string)
{
free(string);
}
0968デフォルトの名無しさん
2006/05/09(火) 17:37:35_wsplitpath_s を使っても取得できません。
//////////////////////////////////////////////////////
WCHAR szPath[_MAX_PATH];
GetModuleFileName( NULL, szPath, sizeof(szPath));
// フルパスを分解
WCHAR szDir[_MAX_DIR];
WCHAR szDrive[_MAX_DRIVE];
WCHAR szFName[_MAX_FNAME];
WCHAR szExt[_MAX_EXT];
_wsplitpath_s(szPath,szDrive,szDir,szFName,szExt);
// フォルダ、ファイル名取得
WCHAR szFilePath[_MAX_PATH];
WCHAR szFileName[_MAX_PATH];
wcscpy_s(szFilePath,szDrive);
wcscat_s(szFilePath,szDir);
wcscpy_s(szFileName,szFName);
wcscat_s(szFileName,szExt);
////////////////////////////////////////////////
これを出力してみると、
フォルダの先頭の方の英語の部分までの階層は表示されますが、日本語の部分からは表示されません。
どうしたらよいか具体的に教えてください。
お願いします。
0969デフォルトの名無しさん
2006/05/09(火) 17:41:450970968
2006/05/09(火) 17:42:56出力は普通に
wprintf_s(szFilePath);
wprintf_s(szFileName);
としてるだけです。
デバッガでみるとちゃんと中身は入ってるみたいなんですけど、
出力されないです。。。
0971968
2006/05/09(火) 17:46:30早速ありがとうございます。
試してみましたが結果は変わりませんでした。。
0972デフォルトの名無しさん
2006/05/09(火) 17:48:40wprintf_s("%s", szFileName);
でどう?
0973968
2006/05/09(火) 17:55:58ありがとうございます。
それだとコンパイルエラーが出たので
wprintf_s(L"%s", szFilePath);
wprintf_s(L"%s", szFileName);
としてみました。
結果は、とりあえず出力されたという点では進展しましたが、
なんだか日本語のところは???????になってしまいました。
0974デフォルトの名無しさん
2006/05/09(火) 17:58:20で、何で表示されないんだろう・・・。
デバッガでは szFileName 内はちゃんとしてるんだよね?
0975968
2006/05/09(火) 18:01:20はい。
最終的にwprintf_sのところでは期待した内容になっております。
文字コードとかって関係ないですよね?
0976デフォルトの名無しさん
2006/05/09(火) 18:04:25wprintf_s(L"%s", L"表示");
wprintf_s(L"表示");
は表示されるのかな?
0977デフォルトの名無しさん
2006/05/09(火) 18:18:340978デフォルトの名無しさん
2006/05/09(火) 18:29:45setlocale(LC_CTYPE , "");
か。
いずれにせよwchar_t系のコンソール出力はコード変換されてから出力されるんで
デフォルトのCロケールから適切なロケールに変更されてないと日本語は出力できないってだけ。
0979968
2006/05/09(火) 18:38:16表示できませんでした・・・
のですが、
>>977の方に教えていただいた
setlocale( LC_ALL,L"japanese");
を試したらいけました!
皆さんありがとうございました。
0980デフォルトの名無しさん
2006/05/09(火) 19:10:19ついでに、Visual Studio 2005のデフォとかlocaleとか入ってないので萎える。
#include <tchar.h>
#include <clocale>
#include <cstdio>
#include <windows.h>
void _tmain(void){
_tsetlocale(LC_ALL, _T("jpn")); // これ忘れると、NT系とか日本語ダメだよね。
_tprintf(_T("ごるぁぁもまえら\n"));
}
0981デフォルトの名無しさん
2006/05/09(火) 20:53:45がわかるといわれたんだが、
real
user
sys
と3つも出てる。
すまんが、各項目の意味を教えてください。
もしくは、説明しているサイトを教えてください。
よろしくお願い致します。
0982デフォルトの名無しさん
2006/05/09(火) 21:09:50このへんかな?
ttp://docs.sun.com/app/docs/doc/817-0659/6mgeo5sa0?l=ja&a=view
0983デフォルトの名無しさん
2006/05/09(火) 21:18:13たとえば、もう一回関数を呼び出して、値を読み出したらどうなるんでしょうか?
0984デフォルトの名無しさん
2006/05/09(火) 21:21:390985デフォルトの名無しさん
2006/05/09(火) 21:23:570986デフォルトの名無しさん
2006/05/09(火) 21:32:190987デフォルトの名無しさん
2006/05/09(火) 21:43:52「試してみたら?」は危険かもな。
0988デフォルトの名無しさん
2006/05/09(火) 22:46:27for(i=3;i <= n; i++)
{
strcpy(rr,ss[i]);
}
って書いたらstrcpyの()の中でひっかかったんですけど、
何が悪いのでしょうか?
よろしくお願いします。
0989デフォルトの名無しさん
2006/05/09(火) 22:47:21頭が悪いんじゃね?
「ひっかかった」ってなんだよ?
0990デフォルトの名無しさん
2006/05/09(火) 22:48:02「ひっかかった」とは?
それから、rrとssの定義がないと何も言えない。
0991デフォルトの名無しさん
2006/05/09(火) 22:48:490992デフォルトの名無しさん
2006/05/09(火) 22:50:40バッファオーバランか
文字列リテラルの領域に書き込み
だと告げています
0993デフォルトの名無しさん
2006/05/09(火) 22:53:140994988
2006/05/09(火) 22:55:53#include <stdio.h>
#include <string.h>
int main(void)
{
int i,n;
char ss[80] , rr[80];
strcpy(rr,"aa");
gets(ss);
n = strlen(ss);
for(i=3;i <= n; i++)
{
strcpy(rr,ss[i]);
}
printf("%s\n",rr);
return 0;
}
0995988
2006/05/09(火) 22:56:33説明不足でスミマセンでした・・・
0996デフォルトの名無しさん
2006/05/09(火) 23:06:470997デフォルトの名無しさん
2006/05/09(火) 23:09:40【初心者歓迎】C/C++室 Ver.27【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1147183708/l50
0998デフォルトの名無しさん
2006/05/09(火) 23:11:04あとstrcpyのプロトタイプ宣言をよく読め
0999デフォルトの名無しさん
2006/05/09(火) 23:14:481000デフォルトの名無しさん
2006/05/09(火) 23:16:1010011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。