相关疑难解决方法(0)

什么算作C11中的字符类型?

什么实际上属于 C11中的"字符类型" - char当然除了?

更确切地说,字符类型的特殊例外(例如,任何对象都可以通过字符类型的左值表达式访问 - 参见C11标准中的§6.5/ 7),它们适用于哪些具体类型?他们似乎适用于uint8_tint8_tstdint.h,但这个保障?在另一方面GCC并不认为char16_tuchar.h一个"性格类型".

c char

13
推荐指数
2
解决办法
713
查看次数

*可能*未签名的字符等于EOF?

fgetc用于读取流的下一个字符时,通常会检查是否未达到文件结尾

if ((c = fgetc (stream)) != EOF)
Run Code Online (Sandbox Code Playgroud)

哪里cint类型.然后,文件结束已经达到并且条件将失败,或者c应该是unsigned转换为的char int,预期与EOF-c 不同,因为EOF确保为负.很好......显然.

但是有一个小问题......通常char类型不超过8位,而且int必须至少有16位,所以每个unsigned char都可以表示为int.然而,在这种情况下char会有16或32位(我知道,在实践中情况从来都不是这样......),没有理由为什么人们不能拥有sizeof(int) == 1,所以它(理论上!)可能fgetc (stream)返回EOF(或另一个负值)但文件结尾尚未达到......

我错了吗?如果没有达到文件结尾,C标准中是否会阻止fgetc返回EOF?(如果是的话,我找不到它!).或者if ((c = fgetc (stream)) != EOF)语法不完全可移植?...

编辑:的确,这是问题#3860943的重复.我在第一次搜索时没有找到这个问题.谢谢您帮忙!:-)

c unsigned char eof fgetc

10
推荐指数
1
解决办法
373
查看次数

为什么C++下溢/溢出行为被认为是未定义的?

我知道整数下溢和溢出是未定义的.

但是,鉴于C++最终编译为汇编,实际定义的行为是不是?

按位表示保持不变,整数格式保持不变0111..11总是会翻转到1000..00,同为下溢,那么为什么不考虑定义的行为?

关于汇编汇编,我是从我们在学校教授的基本程序集中得出的,但代码块给出了

int x = INT_MAX;
int y = x+1;
Run Code Online (Sandbox Code Playgroud)

编译成

00401326    movl   $0x7fffffff,0x8(%esp)
0040132E    mov    0x8(%esp),%eax
00401332    inc    %eax
00401333    mov    %eax,0xc(%esp)
Run Code Online (Sandbox Code Playgroud)

现在,无论x的值如何,总是会有inc或add指令?那么,未定义的行为出现在哪里?

c++

8
推荐指数
2
解决办法
921
查看次数

Octet String是什么意思?Octet和Char有什么区别?

octet string和char有什么区别?如何使用八位字符串?任何人都可以在Octet字符串上写一个小C程序吗?八位字符串如何存储在内存中?

c

7
推荐指数
2
解决办法
2万
查看次数

什么是"Portable C++"?

在互联网上,我看到声称用便携式C++编写的库,好像它是一个(可能是非官方的)标准.

什么是可移植的C++有一个精确的定义,如果有,它是什么?

我不是要求编写可移植代码的常用做法,但如果真的有什么我们称之为"可移植的c ++".

c++

7
推荐指数
1
解决办法
493
查看次数

保留文件字节的最合适的矢量类型是什么?

保留文件字节的最合适的矢量类型是什么?

我正在考虑使用int类型,因为位"00000000"(1字节)被解释为0!

目标是将此数据(字节)保存到文件中,稍后从此文件中检索.

注意:文件包含空字节(以位为"00000000")!

我在这里有点失落.帮我!= D谢谢!


更新I:

要读取我正在使用此功能的文件:

char* readFileBytes(const char *name){
    std::ifstream fl(name);
    fl.seekg( 0, std::ios::end );
    size_t len = fl.tellg();
    char *ret = new char[len];
    fl.seekg(0, std::ios::beg);
    fl.read(ret, len);
    fl.close();
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

注意I:我需要找到一种方法来确保可以从文件中恢复位"00000000"!

注意二:有关将这些位"00000000"保存到文件的安全方法的建议吗?

注3:当使用char数组时,我在转换该类型的位"00000000"时遇到了问题.

代码片段:

int bit8Array[] = {0, 0, 0, 0, 0, 0, 0, 0};
char charByte = (bit8Array[7]     ) | 
                (bit8Array[6] << 1) | 
                (bit8Array[5] << 2) | 
                (bit8Array[4] << 3) | 
                (bit8Array[3] << 4) | 
                (bit8Array[2] << 5) | 
                (bit8Array[1] …
Run Code Online (Sandbox Code Playgroud)

c++ byte bit visual-c++

7
推荐指数
1
解决办法
298
查看次数

什么是最小宽度整数类型有用?

来自ISO/IEC 9899:

7.18.1.2最小宽度整数类型

1 typedef名称int_leastN_t指定宽度至少为N的有符号整数类型,这样没有较小大小的有符号整数类型至少具有指定的宽度.因此,int_least32_t表示宽度至少为32位的有符号整数类型.

为什么我应该使用这种类型?

当我决定采用哪种类型来获取我需要的变量时,我会问自己:"它能携带的最大价值是什么?"

所以我将找到一个答案,检查哪个是最大的2 n,哪个大于那个,并采用匹配的精确整数类型.

所以在这种情况下我也可以使用最小宽度整数类型.但为什么?正如我已经知道的那样:它永远不会是一个更大的价值.那么为什么要采取有时可以覆盖的东西呢?

所有其他情况我可以想象哪里甚至无效的ie:

"我的类型至少是......的大小......" - 这个实现无法知道我将获得的最大(例如)用户输入是什么,因此在编译时调整类型将无济于事.

"我有一个变量,我无法确定它将在运行时保持的值大小."

- 编译器在编译时如何知道? - >它也找不到拟合字节大小.

那么这些类型的用途是什么?

c c99

6
推荐指数
2
解决办法
354
查看次数

是否可以在c ++中创建一个占用少于一个字节内存的类型?

对于我的计算,我只需要使用7位空间,所以我使用的是char类型.但是我想知道是否可以声明我自己的类型使用少于一个字节的内存?

c++ byte types primitive-types

6
推荐指数
2
解决办法
2695
查看次数

重新解释铸造值因编译器而异

对于同一个程序:

const char* s = "abcd";
auto x1 = reinterpret_cast<const int64_t*>(s);
auto x2 = reinterpret_cast<const char*>(x1);
std::cout << *x1 << std::endl;
std::cout << x2 << std::endl; // Always "abcd"
Run Code Online (Sandbox Code Playgroud)

在gcc5(链接):139639660962401
在gcc8(链接):1684234849

  1. 为什么值根据不同的编译器版本而有所不同?
  2. 什么是编译器安全的方式从const char*移动到int64_t和向后(就像在这个问题 - 不是实际的整数字符串,而是与其他字符一起)?

c++ c++11

6
推荐指数
1
解决办法
224
查看次数

位掩码和长长的

我有一个屏蔽程序(为给定大小的下半部分创建一个全位掩码):

template<class T>
T bottom_half() {
    T halfway = ((sizeof(T) * 8) / 2);
    T mask = (1 << halfway) - 1;

    return mask;
}
Run Code Online (Sandbox Code Playgroud)

这要是我称之为正常工作bottom_half<int>()longchar.但是当我运行某些原因long long,halfway正确设置为32,但是mask0.那为什么会这样?

c++

5
推荐指数
1
解决办法
899
查看次数

标签 统计

c++ ×6

c ×4

byte ×2

char ×2

bit ×1

c++11 ×1

c99 ×1

eof ×1

fgetc ×1

primitive-types ×1

types ×1

unsigned ×1

visual-c++ ×1