为什么我在C中创建的新字符串使用╠而不是空格?

时间:2018-12-06 20:31:15

标签: c

初始化字符串时:

char pol [100];

打印它,我得到100次奇怪的we标志。 我的问题是如何初始化字符串,将其打印并仅获取空白? 谢谢!

3 个答案:

答案 0 :(得分:2)

是OEM 850代码页中的代码为0xCC的字符。

在调试版本中,Visual C使用0xCC初始化未初始化的数据,以帮助您检测未初始化的数据。

您应该初始化数组。

char pol[100] = {0};

char pol[100] = "test data";

答案 1 :(得分:1)

初始化字符串时: ...

变量pol尚未初始化,仅被声明,因此,由于 C string 的定义,它甚至可能不是{{1 }} 在此刻。在这种状态下(例如在string语句中使用它很危险,因为它可以调用 undefined behavior )。

更改此:

printf()

为此

char pol[100];

例如:

char pol[100] = {0};//initializes entire array to `0`.

答案 2 :(得分:0)

您可以执行以下操作:

char pol[100]; 
pol[0] = '\0'; 

第一个字符为null character

如果要使用所有数组:char pol[100] = {0};

以这种方式测试:

char test[100] = { 0 };

for (int i = 0; i < 100; i++)
    printf("%c ", test[i]);

您可以在此处查看程序集:

对于x86的旧编译器,其生成方式如下:

push    100  
push    0
lea     eax, DWORD PTR _teste$[ebp]
push    eax
call    _memset
add     esp, 12 

在较新的版本上:

lea     rdx, [rbp-112]
mov     eax, 0
mov     ecx, 12
mov     rdi, rdx
rep stosq
mov     rdx, rdi
mov     DWORD PTR [rdx], eax
add     rdx, 4       

Godbolt.org上进行测试,选择合适的编译器