相关疑难解决方法(0)

具有相同名称的静态变量的 switch case 的单独作用域

更新:我现在重新测试了简化的测试用例和恢复共享名称的完整代码,并且它可以正常工作。我的代码中的其他地方可能还有一些其他错误,现在已修复。抱歉浪费了您的时间和精力;将来永远不会在没有工作测试用例的情况下发布。我的罪过。


我有一个我反复调用的 C++ 函数。它有以下片段

     switch(c)
     {
     case 1:
        {
          static int i = 0;
          if ( ... )  { i = 0; }
          .... 
          break;
        }
     case 2:
        {
          static int i = 0;
          if ( ... )  { i = 0; }
          .... 
          break;
        }
     case 3:
        {
          static int i = 0;
          if ( ... )  { i = 0; }
          .... 
          break;
        }
     }
Run Code Online (Sandbox Code Playgroud)

这个想法是它必须记住每个案例的状态,有时它必须重置它。

它没有正常工作。当我调试它(​​MSVC++ 2010 Express Edition)时,我注意到每个i人的行为都不是独立的,他们的值似乎在自己改变;此外,当重设条件被击中时,相应的if输入 OK 但 …

c c++ static scope switch-statement

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

为什么用一个参数而不是两个参数调用deallocation函数?

我一直在努力理解以下行为:

#include <iostream>
#include <cstdlib>

using namespace std;

struct A
{ 
    void operator delete[](void *p)
    {
        cout << "delete\n";
        ::operator delete[](p);
    }

    void operator delete[](void *p, size_t t)
    {
        cout << "delete with two arguments\n";
        ::operator delete[](p);
    }
};

int main()
{
    A *a = new A[5];
    delete [] a;
}
Run Code Online (Sandbox Code Playgroud)

演示

在示例中,调用具有一个参数的非放置释放函数.但是5.3.6/10 N3797 C++ 14工作草案说:

如果类型完成并且如果解除分配函数查找同时发现仅具有指针参数的通常释放函数和具有指针参数和大小参数的通常释放函数,则所选择的释放函数应该是 具有两个参数的函数.

这是一个错误吗?

c++ memory-management

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

如何在调试版本中阻止strncpy_s填充目标缓冲区?

我维护strncpy了一大堆仍然使用很多的遗留代码.我现在开始strncpy用它的安全对应物替换使用的过程strncpy_s.我注意到这strncpy_s是用-2值填充目标缓冲区 - 但仅在调试版本中!在发布版本中,不会发生填充.

例如:

char buffer[3];
// buffer becomes 00000000  00000000  00000000
memset(buffer, 0, sizeof(buffer));
// buffer becomes 01100001  00000000  11111110
//                97 ('a')  0        -2
strncpy_s(buffer, sizeof(buffer), "a", _TRUNCATE);
// i is -2
int i = buffer[2];
Run Code Online (Sandbox Code Playgroud)

MSDN文档不提这个填充行为,在我的情况下,它是真正的东西,我不想因为我的遗留代码依赖于一个事实,即缓冲区的归零部分保持零和字符串复制过程中不会被覆盖.

有没有办法阻止strncpy_s在调试版本中填充目标字符串?

请注意,我已使用Visual Studio 2010和Visual Studio 2013对此进行了测试.

c++ string visual-c++

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

调用strcpy的结果与预期不同

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

int main()
{
   char src[]="123456";
   strcpy(src, &src[1]);
   printf("Final copied string : %s\n", src);
}
Run Code Online (Sandbox Code Playgroud)

当我使用Visual Studio 6编译器时,它给了我预期的答案" 23456".

为什么23556gcc 4.7.2编译时这个程序打印" " ?

c strcpy

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

新行字符是否与前一个字符在同一行中

我为什么要问?

我被赋予了重新实现文本框GUI小部件和类型编写器的严峻任务,因此这是此问题的起源.


我目前的做法

目前在我的项目中,新行字符\n保存下一行(column1,line + 1)最终第一个字符的位置坐标.但是,我担心这不是对换行位置的标准理解.


新行字符是否与\n前一个字符在同一行中,它是下一行的一部分(因为它在我当前的方法中)或者它们都不是?


这有什么不同吗?

我在使用退格键删除新行时遇到了复杂问题,因为我必须为此事件实现特定条件,但我试图避免这种情况(或者可以通过更改处理新行字符的方式来避免),因为从所有这些条件来看,我看起来正在尝试发明AI或其他东西.

c user-interface textbox position newline

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

如何不调用警告:缺少类型说明符?

我正在阅读Brian W. Kernighan和Dennis M. Ritchie的" C编程语言 ".在第1.2章"变量和算术表达式"中,他们演示了一个简单的华氏温度到摄氏温度转换器程序.当我编译程序(Terminal.app,macOS Sierra)时,我收到此警告:

$  cc FtoC.c -o FtoC.o
FtoC.c:5:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main()
^
1 warning generated.
Run Code Online (Sandbox Code Playgroud)

这是C程序:

FtoC.c:
  1 #include <stdio.h>
  2 
  3 /* print Fahrenheit-Celsius table
  4     for fahr = 0, 20, ..., 300 */
  5 main()
  6 {
  7   int fahr, celsius;
  8   int lower, upper, step;
  9 
 10   lower = 0;      /* lower limit of temperature scale */
 11   upper = 300;    /* upper limit */ …
Run Code Online (Sandbox Code Playgroud)

c kernighan-and-ritchie compiler-warnings

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

为什么在结构中允许未定义大小的数组?

当我编写以下代码时,我得到了预期的错误error: array size missing in 'data'

int main()
{
    unsigned char data[];

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

但是,当我运行相同的代码但将违规行包装在 a 中时struct,没有错误。

typedef struct credit_card_s
{
  unsigned char is_valid;

  unsigned char data[];

} credit_card_t;
Run Code Online (Sandbox Code Playgroud)

谁能向我解释为什么允许这样做?

c

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

寻找C/C++语言和标准库规范

可能重复:
我在哪里可以找到当前的C或C++标准文档?

我有几本C书,其中一本是C by Discovery,很好地解释了这门语言.但到目前为止,我似乎无法完整地找到完整的C/C++语言和库标准以及函数,类型等列表.

C99的完全标准在哪里以及C语言标准,C++语言标准及其库中较旧的,通常更常用和可接受的标准?

是否有一些我必须支付的费用,或者我应该遵循像GCC那样的维基百科和文档?

我还应该去哪里下载或完全获取它们?

c c++ specifications

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

container.erase(first,last)其中first == last在STL容器中

当在STL中第一个== last时,是否有针对container.erase(first,last)的定义行为,还是未定义?

例:

std::vector<int> v(1,1);
v.erase(v.begin(),v.begin());
std::cout << v.size(); // 1 or 0?
Run Code Online (Sandbox Code Playgroud)

如果有一个标准库规范文档有这些信息,我将不胜感激.

c++ stl

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

哪个"标准"是C++ 11标准?

我对什么是C++ 11最终标准感到困惑,如果有这样的事情,什么是标准更新,哪里是该信息的权威和可信赖的来源.

ISO网站提供了在他们的商店购买的"最终标准",这似乎是截至2011年底的最新标准.

但是,工作组的网站提供的日期多于ISO出版物的"草稿".我在2012年11月在工作组网站上发布的最新版本(pdf).

这是否意味着工作组免费提供更新和更新的规范,而ISO则出售旧的和过时的文件?或者是别的什么?

可能bere是描述文件之间关系的官方链接?官方反对委员会成员个人博客.

c++ standards c++11

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