相关疑难解决方法(0)

cplusplus.com有什么问题?

对于这个问题,这可能不是一个非常合适的论坛,但是让我试一试,冒着被搬走的风险.

C++标准库有几个参考,包括非常有价值的ISO标准,MSDN,IBM,cppreferencecplusplus.就个人而言,在编写C++时,我需要一个具有快速随机访问,短加载时间和使用示例的引用,并且我一直在发现cplusplus.com非常有用.但是,我一直在SO上听到关于该网站的负面看法,所以我想具体说明:

cplusplus.com提供的错误,误解或错误建议有哪些?使用它来做出编码决策有哪些风险?

让我补充一点:我希望能够通过标准的准确报价在这里回答问题,因此我想发布可立即使用的链接,而cplusplus.com将是我选择的网站,如果不是这个问题.

c++

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

这是允许的:memcpy(dest,src,0)

传递0到是否有问题memcpy():

 memcpy(dest, src, 0)
Run Code Online (Sandbox Code Playgroud)

请注意,在我的代码中,我使用的是变量而不是0有时可以求值的变量0.

c c++

2
推荐指数
1
解决办法
726
查看次数

创建大小为零的灵活数组成员是否合法?

C99标准允许创建灵活的阵列成员,例如

typedef struct pstring {
  size_t length;
  char   string[];
} pstring;
Run Code Online (Sandbox Code Playgroud)

然后用类似的东西初始化pstring* s = malloc(sizeof(pstring) + len).len为零是允许的吗?它似乎是一致的,并且不时地节省空间(pstring当然可能不是这个例子).另一方面,我不知道下面的代码会做什么:

pstring* s = malloc(sizeof(pstring));
s->string;
Run Code Online (Sandbox Code Playgroud)

这看起来似乎可能适用于一个编译器而不是另一个编译器,或者在一个操作系统而不是另一个操作系统上,或者在某一天而不是另一个,所以我真正想知道的是标准对此的说法.这是malloc示例代码中未定义的行为,还是仅对其s->string无效的访问,还是完全不同的其他内容?

c struct c99 flexible-array-member

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

是否在C ++标准中定义了memcpy(dest,src,0)?

这个问题许多更多的是问,如果一个呼叫本网站上的许多问题中的memcpy()是与零值指定的长度\大小有效。回答时,每个人都引用当前的C标准(在本例中为C17 ISO / IEC9899:2017第283页),

如果声明为as的参数size_t n指定函数数组的长度,则对该函数n的调用的值可以为零。除非在本节中对特定功能的描述中另有明确说明,否则此类调用上的指针参数仍应具有有效值,如7.1.4中所述。在这样的调用中,找不到字符的函数没有出现,比较两个字符序列的函数返回零,而复制字符的函数则复制零字符。

但是,这来自C标准,C ++标准引用。

在当前的C ++标准(即C ++ 17 ISO / IEC 14882)的何处列出了相同的定义?CC ++具有两种不同的标准(和语言),据我所知,您不能引用一个标准并期望在另一个标准中存在相同的规则/行为。

如果C标准中的这种引用在C ++中有效而未在标准中明确说明,那么有人可以提供一个源来备份CC ++之间的这种连接吗?

c++ standards memcpy

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

该函数的行为是否已定义?

int *shiftRmemmove(int *arr, size_t size)\n{\n    if(arr && size)\n    {\n        memmove(arr + size - 1, arr + size - 2, (size - 1) *sizeof(*arr));\n        arr[0] = 0;\n    }\n    return arr;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

是否定义为size == 1它正在计算并传递对第一个元素之前的数组元素的引用。它相当于:memove(arr, arr -1, 0); (\xc2\xa9Jabberwocky)

\n

c language-lawyer

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