小编aut*_*tic的帖子

使用数字作为大小创建整数的char数组

我试图在C中创建一个char数组,用int的数字填充它,但int可以是任意数量的数字.

我正在使用一个名为的创建函数getDigits(int num),它返回int所具有的多个数字.

char buffer[getDigits(number)] = "";
snprintf(buffer, sizeof(buffer),"%d",number);
Run Code Online (Sandbox Code Playgroud)

但是当我使用gcc编译时,它返回:

error: variable-sized object may not be initialized

我已经尝试了一切.当我宣布它时char fileSizeStr[5] = "";,它是有效的.当我尝试动态声明缓冲区大小时,我可以看到问题正在上升,但我真的想知道是否是实现此目的的一种方法.

c arrays printf digits itoa

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

在声明VLA的同一序列点中启动VLA的大小部分是否有效?

这篇文章中,OP包含有很多错误的代码,但是1行让我特别好奇,因为我无法查看任何东西,不允许它.这是具体的一行:

int n = 100000, arr[n];
Run Code Online (Sandbox Code Playgroud)

是否确保了声明和初始化的顺序?

所以在这里我会假设它甚至可能发生narr获得声明时没有被初始化,看起来很不好.

但是我无法在iso/iec 9899草案中找到任何关于此的陈述,既没有说明未定义也没有定义它.

这是因为我假设未定义的行为?或者是吗?

无论哪种方式,该结果适用的规则是什么?5

编辑:

这对C99也有效吗?

c sequence-points variable-length-array

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

C++ 和网络套接字

我已经涉足 C,目前我正在学习 C++。

我想学习标准库(std::命名空间),所以我正在做一些项目。一个是简单的电子邮件程序,它登录到我的本地 SMTP 服务器并显示我的电子邮件,并具有发送邮件的能力。我为那种古老的感觉添加了一点 ncurses。

问题是,我一直无法找到使用网络套接字的标准库方式。好像我不得不用C使用网络插座sys/socket.h,但后来我结束了一个文件描述符,它的叶子read()write()send()函数调用。我希望能够使用std::fstreamorstd::ostream类。但是open()成员函数采用文件名,而不是文件描述符。

我知道 Boost 库具有此功能,但模板等对我来说是遥不可及的,我现在只想坚持使用标准库。

我开始之前,我只是想确保没有一个更好的办法read(),并write()以一个已经被返回的文件描述符connect()网络套接字C函数。

c++ sockets standards

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

指针的地址是什么意思?

如果我们有代码:

int b = 10;
int* a = &b;
std::cout << a << " " << &a << " ";
Run Code Online (Sandbox Code Playgroud)

结果,地址不同。

但是指针的地址是什么意思呢?

指针具有变量地址的值,因为我们在内存中有一个变量。但是我们内存中并没有存储地址的值,那么为什么我们会有一个地址的地址呢?

可能我的理解有些偏差,谢谢大家的帮助。

c++ pointers memory-address

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

textNode可以有一个childNode,它是一个elementNode吗?

说,有以下可能:

textNode.appendChild(elementNode);
Run Code Online (Sandbox Code Playgroud)

elementNode指那些nodeType设置为1的那些

textNode指那些nodeType设置为2的那些

生产起来并不容易.

我问这个的原因是我找到了一个函数,它在引用的末尾添加了一个引用链接:

function displayCitations() {
  var quotes = document.getElementsByTagName("blockquote");
  for (var i=0; i<quotes.length; i++) {
  if (!quotes[i].getAttribute("cite")) continue;
  var url = quotes[i].getAttribute("cite");
  var quoteChildren = quotes[i].getElementsByTagName('*');
  if (quoteChildren.length < 1) continue;
  var elem = quoteChildren[quoteChildren.length - 1];
  var link = document.createElement("a");
  var link_text = document.createTextNode("source");
  link.appendChild(link_text);
  link.setAttribute("href",url);
  var superscript = document.createElement("sup");
  superscript.appendChild(link);
  elem.appendChild(superscript);
  }
}
Run Code Online (Sandbox Code Playgroud)

看到最后一行" elem.appendChild(superscript);"哪里elem可以textNode

我认为很难证明它的原因是因为很难获得指定的访问权限textNode.有没有人能够实现这一目标?

javascript dom

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

有没有任何C实现有一个无用的单位`int`位域?

n1570的6.7.2.1p9说:

结构或联合的成员可以具有除可变修改类型之外的任何完整对象类型.另外,可以声明成员由指定数量的位组成(包括符号位,如果有的话).这样的成员称为位域; 124)其宽度前面有冒号.

我是否正确理解这表明单个成员struct { int bit:1; }可能是一个符号位?

如果是这种情况,则遵循这样的位字段可能存储在某些实现上的唯一值是,0并且-0其中-0可能与0一旦存储或陷阱表示无法区分.

是否有任何实际的实现只能将一个值分配给这样的位域?

c c99 bit-fields c11

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

如何在C++中声明指向常量的指针?

我正在尝试编写一个函数来解析命令行参数.这是函数声明:

void parse(int, char const **);
Run Code Online (Sandbox Code Playgroud)

为以防万一,我也尝试过(const char)**,const char **cchar **使用typedef const char cchar.但是,如果我将一个char **函数传递给函数,所有这些(如预期的那样,因为它们应该都是相同的)会导致错误,如:

void main(int argc, char **argv) {
    parse(argc, argv);
Run Code Online (Sandbox Code Playgroud)

我从GNU编译器获得的错误是error: invalid conversion from 'char**' to 'const char**'来自Clang的错误candidate function not viable: no known conversion from 'char **' to 'const char **' for 2nd argument.

我已经看到这样的解决方案被建议为声明一个指向char(const char * const *)的const指针的指针,但我不希望任何指针都是const因为我希望能够修改指针,所以我可以迭代一个参数使用for(; **argv; ++*argv).如何声明"指向const char的非const指针的非const指针"?

c++ pointers

3
推荐指数
2
解决办法
146
查看次数

构造函数中的分段错误

我尝试在C++中创建的每个类都会发生这种情况.从java迁移,我发现问题主要在于创建类.我运行valgrind并且它在构造函数中,它似乎是.

==30214== Memcheck, a memory error detector
==30214== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==30214== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==30214== Command: ./CoC
==30214== 
==30214== 
==30214== Process terminating with default action of signal 11 (SIGSEGV)
==30214==  Bad permissions for mapped region at address 0x404B4F
==30214==    at 0x4C2B9EC: strcat (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==30214==    by 0x404220: Model::Model(std::string) (in /home/kronus/Apollo/CoC)
==30214==    by 0x402617: main (in /home/kronus/Apollo/CoC)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在尝试将此模型类的构造函数调用到main方法中.这是构造函数的代码

Model::Model(std::string filename)
{
m_TotalFaces = …
Run Code Online (Sandbox Code Playgroud)

c++ header-files memory-segmentation

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

在C和C++中编写代码的不同值

我正在解决一个问题,找到所有素数的总和,直到200万,在C中.我一直得到错误的答案(1179908154)但是当我在c ++中编写相同的代码时,它给出了正确的答案(142913828922).请告诉我为什么会这样,谢谢.

这是我的代码

void main()
{
    int i,j;
    unsigned long long sum;

    for(sum=2,i=3;i<=2000000;i+=2)
    {
        for(j=3;j*j<=i;j++)
            if(i%j==0)
                break;
        if(j*j>i)
            sum+=i;
    }
    printf("%d",sum);
}
Run Code Online (Sandbox Code Playgroud)

我在Windows 7,32位并使用GNU GCC v4.7.1

c c++ algorithm printf

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

从 Big O 粗略估计运行时间

如果我的程序的时间复杂度O(n^2),对于 n,10^6 的大值,我如何以秒单位表示运行时间?

我需要对此进行粗略估计以了解是否需要优化或者我可以继续我的代码....时间限制为 0.6 秒

问题不是关于时间复杂度的计算......而是关于从时间复杂度估计运行时间

algorithm big-o time-complexity

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