[過去ログ] Visual Studio 2017 Part5 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
150
(1): デフォルトの名無しさん (ワッチョイ f3b3-opPu) [sage] 2018/03/18(日) 01:58:19.94 ID:vTP8CpkY0(1/4) AAS
>>142
142(2): デフォルトの名無しさん (ワッチョイ f3b3-opPu) [sage] 2018/03/17(土) 23:29:12.43 ID:KpeS82sv0(1) AAS
>>118
#include <stdio.h>
#include <string.h>

int main()
{
  char *a = "foo";
  char *b = "bar";

  if (strcmp(a, b) != 0) {
    printf("%d", strcmp(a, b)); /* -> 1 */
  }

  return 0;
}
で、*(a + 1) = 'x';した後のaが"fxo"にならないのは何故?
155
(1): デフォルトの名無しさん (ワッチョイ f3b3-opPu) [sage] 2018/03/18(日) 04:43:06.65 ID:vTP8CpkY0(4/4) AAS
>>144
144(2): デフォルトの名無しさん (ワッチョイ 7f81-hKdO) [sage] 2018/03/17(土) 23:54:55.97 ID:6YFzNXRG0(1) AAS
慣習的にコンパイルは通るが、
いまだに ポインタ = 文字列 なコード書く馬鹿いるんだな
char *a = "foo"; って書くと、>>150>>151
151(1): デフォルトの名無しさん (ワッチョイ f3b3-opPu) [sage] 2018/03/18(日) 02:31:55.41 ID:vTP8CpkY0(2/4) AAS
ついでに>>143で、constの場合はコンパイルエラー、char []の場合は"fxo"になります
>>154
154(1): デフォルトの名無しさん (ワッチョイ f3b3-opPu) [sage] 2018/03/18(日) 03:56:15.21 ID:vTP8CpkY0(3/4) AAS
因みにgcc 5.3.0だと、char *の*(a + 1) = 'x';で Segmentation fault、全てのstrcmp(a, b)で4、以外は変わらずでした
のように、aに書き換え不可領域の"foo"のアドレスが代入されます
char a[] = "foo"; って書くと、書き換え不可領域の"foo"のサイズ(4バイト)を計算、書き換え可能領域にメモリを確保、"foo"をコピー、そのアドレスがaに代入されます
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.045s