2017-10-20 27 views
-2


バイナリ形式の文字列を出力しようとしていますが、最初の実行では*s << = 1;にセグメント化エラーが発生します。
間違いはどこですか?左の算術シフトによるセグメンテーションフォールト

#include <stdio.h> 
#include <uchar.h> 
#include <locale.h> 
#include <string.h> 

int main() { 
    setlocale(LC_CTYPE, ""); 
    char *s = u8"\uD798"; 
    int c = (sizeof *s) * strlen(s); 
    for(int i = 0; i < 8 * c; i++) { 
     putchar(*s & 0x80 ? '1' : '0'); 
       fflush(stdout); 
     if((i + 1) % 8 == 0 && i != 0) { 
      putchar('\n'); 
      s++; 
     } 
     *s <<= 1; //segfault here 
    } 
    printf("\n%s - %i\n", u8"\uD798", c); 
    return 0; 
} 
+2

'char s [] = u8" \ uD798 ";'文字列を読み書き可能メモリに格納する – Ctx

+0

リテラルは変更できません。 – CiaPan

+0

'const char * s = u8" \ uD798 ";"コンパイラは実行時ではなくエラーをキャッチすることができます。 – Clifford

答えて

2

ポインタsは、読み取り専用メモリに格納された文字リテラルを指します。それを変更することはできません。