[過去ログ] C言語なら俺に聞け 163 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1(4): (ワッチョイ 7bba-Lem2) 2024/07/16(火)22:43 ID:ZrsCjURC0(1) AAS
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
外部リンク:paiza.io
外部リンク:ideone.com
外部リンク:codepad.org
C17
外部リンク[pdf]:www.open-std.org
C11
外部リンク[pdf]:www.open-std.org
C23 最新ドラフト
外部リンク[pdf]:www.open-std.org
C99
外部リンク[pdf]:www.open-std.org
外部リンク[html]:kikakurui.com
C FAQ 日本語訳
外部リンク:www.kouno.jp
JPCERT C コーディングスタンダード
外部リンク:www.jpcert.or.jp
※前スレ
C言語なら俺に聞け 162
2chスレ:tech VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
12(3): (アウアウエー Sa4a-ZlnX) 2024/08/14(水)08:45 ID:92pG5tQ9a(1) AAS
CPUが最後に処理したアキュムレータの内容が
戻り値として有効になってるケースが多い
違う実装があったら教えてくれ
68(4): (ワッチョイ fa2d-2PHd) 2024/09/09(月)17:06 ID:ft14UVke0(1) AAS
lvalueに関してエラーが出るんだけど、どうしてこれがだめなのかわからないです
#include <stdio.h>
int main()
{
char s[] = "hoge";
char t[100];
while (*t++ = *s++)
;
printf("%s", t);
}
154(3): (ワッチョイ 8a56-/VPw) 2024/09/14(土)18:13 ID:5H/bnNk90(2/4) AAS
はちみつ餃子の説明はたぶん、C++ の考え方が混ざっていないか
C で配列の初期化子に文字列リテラルが書けるのはあくまで文字列リテラル限定であって、それは式として扱われるのではなく、lvalue も rvalue もクソもないということだと思うが
163(3): (ワッチョイ 7910-VVra) 2024/09/14(土)22:15 ID:zMI9sEnq0(1) AAS
配列と別に文字列もどこか別に確保しといて何の意味があるんだよ
この形で配列作る度に二倍メモリ食うことになるじゃないか
174(3): はちみつ餃子◆8X2XSCHEME (ワッチョイ f732-vU+L) 2024/09/15(日)01:30 ID:B6k8li/O0(1/3) AAS
>>173
配列とその初期化子として現れる文字列リテラルが別の存在だってことが俺が何度も書いてることだよ。
これがそんなに何度も何度も何度も何度も書かないと理解できないようなことか?
別のポインタは配列を指せるが、その初期化子として現れる文字列リテラルを指せるわけじゃない。
char* foo = "hoge";
のようなケースではポインタ foo は文字列リテラルを指してるということと対比しての話だぞ。
222(8): (ワッチョイ d7cd-qbvN) 2024/09/18(水)00:42 ID:wcwImUMc0(1/3) AAS
>>217
この場合に限らずcでは範囲チェックなどされないでしょ
必要なら自分でチェックするのが原則
void aaa(char hage[10],int idx)
{
if((UINT)idx < sizeof(hage)/sizeof(hage[0]))
printf("%d=%d¥n",idx,hage[idx]);
else
printf("%dは範囲外だhage¥n",idx);
}
これなら[10]に意味が出る
322(3): (ワッチョイ 7161-m4Ma) 2024/11/07(木)22:04 ID:E5qLHtEE0(1) AAS
質問失礼
LPTSTR lptStr = TEXT("テスト");
って書くとE0144とC2044ってエラーを吐くんだがプロパティの文字セットって項目を設定なしにすると正常に処理されるのはどういう理屈なの?
const wchar_t[]からLPTSTRに変換できませんってメッセージ出るし型が違うのかなと思うが
だとしたら何故文字設定いじれば解消するのかもよくわからない
343(3): (ワッチョイ f648-UxC2) 2024/11/09(土)14:22 ID:12zpUv7J0(1) AAS
VS使ってるからたぶんCじゃなくてC++
こういうボンクラの自覚ないボンクラは相手しても疲れるだけ
627(4): (ワッチョイ 6a56-WFrT) 02/10(月)16:46 ID:xKid5uSQ0(1) AAS
よく分からないがこうなる理由が分からないという意味の質問かな?
まあそうだとして、C言語では異なるオブジェクトへのポインタを比較出来ないってルールがある
それが行われているので、未定義の動作といってこのプログラムではコンパイラがどんな事をしてもいいことになってる
そのどんな事の中にはnot equalを表示するという動作も含まれているので、たまたまそうなったんでしょう
初心者がよくやるFAQレベルのミスなので、ポインタとオブジェクトを理解する意味でその辺も読んでみればもっと上達するでしょう
他にもヘンな部分があるので色々他の人のコードとかも読むといいね
648(4): (ワッチョイ 7f1b-hc6T) 02/11(火)21:27 ID:JzAdQ4dR0(1) AAS
とりあえず読むべし
旧石器時代のポインタをご利用の皆様へ 〜provenance入門〜
外部リンク:qiita.com
728(3): はちみつ餃子◆8X2XSCHEME (ワッチョイ 2170-a7BF) 03/20(木)17:31 ID:PqZkwPwR0(1) AAS
GCC では遅くても 2.95.3 には attribute で文字列が書式であることを指定できて型チェックする機能はあった模様。(2001年頃)
外部リンク[html]:gcc.gnu.org
ただな、このスレにいるようなおじさんの言う「昔」は 1980 年頃の話だったりするんよ。
MS-DOS 用とか CP/M 用とかのコンパイラの話なんよ。
755(4): (ワッチョイ a92a-K+vz) 04/08(火)18:05 ID:f9O97Hv70(1) AAS
sudo で実行すると execl が動作しないように見える。なぜ?
$ cat -n e.c
1 #include <stdio.h>
2 #include <unistd.h>
3
4 int main() {
5 pid_t pid;
6 if ((pid = fork()) > 0) return 0;
7 else if (pid < 0) return 1;
8 execl("/bin/bash", "/bin/bash", "-c", "echo $$ $PPID >> /tmp/log", NULL);
9 _exit(2);
10 }
$ gcc -g e.c
$ ./a.out
$ cat /tmp/log
10593 1566
$ sudo ./a.out
$ cat /tmp/log
10593 1566
$
879(3): (ワッチョイ 7748-ar6z) 07/01(火)20:20 ID:4pZHV5xo0(2/4) AAS
そうではなく
OSレベルで自動変換が行われているのに
言語レベルの自動変換に文句言うのもなんだなぁと
そういう話
953(3): (ワッチョイ 6776-7F+n) 07/23(水)19:09 ID:trP3on0s0(2/2) AAS
老人がGPTと会話して寂しさを紛らわせてるという話をラジオで聞いて愕然としたわ
会話に女性言葉を使うように教育してるらしいw
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.048s