小编San*_*raj的帖子

C中的递归深度是否有任何硬连线限制

正在讨论的程序试图计算sum-of-first-n-natural-numbers使用recursion.我知道这可以使用一个简单的公式来完成,n*(n+1)/2但这里的想法是使用recursion.

该计划如下:

#include <stdio.h>

unsigned long int add(unsigned long int n)
{
    return (n == 0) ? 0 : n + add(n-1); 
}

int main()
{
    printf("result : %lu \n", add(1000000));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

该计划运作良好,n = 100,000但当价值n增加到1,000,000它导致aSegmentation fault (core dumped)

以下内容取自该gdb消息.

Program received signal SIGSEGV, Segmentation fault.
0x00000000004004cc in add (n=Cannot access memory at address 0x7fffff7feff8
) at k.c:4
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 是否有任何硬连接限制recursion depth …

c recursion stack segmentation-fault

13
推荐指数
3
解决办法
7512
查看次数

指向C中的字符串数组的指针

玩指针C很有趣(不是真的).

我有几个字符串数组我想以简单的方式声明,最好是:

arrayOfStrings1 = {"word1", "word2", etc. };
arrayOfStrings2 = {"anotherword1", "anotherword2", etc. };
arrayOfStrings3 = etc.
etc.
Run Code Online (Sandbox Code Playgroud)

类似于翻译数组的东西(但不完全),所以我希望能够在运行时间间隔这些.为此,我想要一个pointerToArrayOfStrings我可以交换的指针:

pointerToArrayOfStrings = arrayOfStrings1;
doStuff();
pointerToArrayOfStrings = arrayOfStrings2;
doSomeOtherStuff();
Run Code Online (Sandbox Code Playgroud)

在我对字符串数组和指向这些字符串的指针的天真理解中,这就是我所尝试的:

// Danish transforms
const unsigned char* da_DK[] = {"b","bb","c","c","cc","d","dd","e","f","ff","g","gg","h","hh","j","j","jj","k","k","kk","l","l","l","l","ll","m","mm","n","n","nn","p","pp","r","r","r","rr","s","s","s","ss","t","t","tt","v","v","vv","æ"};

// British english transforms
const unsigned char* en_GB[] = {"a","a","a","a","a","a","a","a","a","a","a","a","a","age","ai","aj","ay","b","cial","cian","cian","dj","dsj","ea","ee","ege","ei","ei","eigh","eigh","f","f","f","g","g","gs","i","i","i","j","j","k","ks","kw","l","m","n","n","o","r","s","s","sd","sdr","sion","sion","sj","sj","tial","tion","tion","tj","u","u","u","u","w","ye","ye","z"};

    // More languages....

const unsigned char** laguageStrings;

// Assign language
if (streq(language, "da-DK")){
    laguageStrings= da_DK;
}
else if (streq(language, "en-GB")){
    laguageStrings= en_GB;
}
else
         return 0;
}
Run Code Online (Sandbox Code Playgroud)

语言是char …

c arrays string pointers

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

将队列设计为共享内存

我正在尝试将(循环)队列(在C中)设计/实现为共享内存,以便它可以在多个线程/进程之间共享.

队列结构如下:

typedef struct _q {
    int q_size;
    int q_front;
    int q_rear;
    int *q_data;
}queue;
Run Code Online (Sandbox Code Playgroud)

它支持以下功能:

int empty_q(queue *q);
int display_q(queue *q);
int create_q(queue **q, int size);
int delete_q(queue **q);
int enqueue(queue *q, int data);
int dequeue(queue *q, int *data);
Run Code Online (Sandbox Code Playgroud)

根据用户提到的队列大小,q_data的内存将在create_q()中分配.

问题:如何使用"sys/shm.h"中提供的系统函数为此队列创建共享内存?用于创建/附接/检索/删除使用共享存储器用于队列数据结构中的任何的代码段/示例shmget的(),的shmat(),了shmctl()等将是一个很大的帮助.

c memory posix shared-memory

10
推荐指数
2
解决办法
8764
查看次数

结构指针兼容性

假设我们有两个结构:

typedef struct Struct1
{
    short a_short;
    int id;
} Struct1;

typedef struct Struct2
{
    short a_short;
    int id;
    short another_short;
} Struct2;
Run Code Online (Sandbox Code Playgroud)

从哪里投Struct2 *来安全Struct1 *?ANSI规范对此有何规定?我知道有些编译器可以选择重新排序结构字段以优化内存使用,这可能会使两个结构不兼容.有没有办法确定这段代码是否有效,无论编译器标志如何?

谢谢!

c struct casting ansi

9
推荐指数
2
解决办法
1061
查看次数

DLL总是具有相同的基址吗?

我正在研究windows和DLL的东西,我对它有一些疑问.:)

我做了一个加载我自己的DLL的简单程序.这个DLL只有简单的函数,加上减号.

这是一个问题:如果我加载一些DLL(例如text.dll),这个DLL是否总是具有相同的基址?或者重新启动时它会改变吗?我可以保存DLL的基地址吗?

当我测试它时,它总是有相同的基地址,但我想我需要做的时候,我必须对DLL基地址做一些例外.

c windows

9
推荐指数
2
解决办法
1704
查看次数

卸载动态库需要两个dlclose()调用吗?

我有一个动态库,我加载使用dlopen()然后卸载使用dlclose();

如果我不包含任何目标c代码dlopen()需要一个dlclose()预期行为的调用.但是当我将任何目标c代码包含在目标中时,我遇到的问题是我需要对dlclose()加载的库进行两次调用才能卸载.

这是预期的行为吗?我该如何解决?

c macos cocoa objective-c dylib

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

如何使用XCB将关键事件发送到应用程序?

如何使用其他程序将按键或按键释放事件发送到窗口(当前活动窗口)XCB

我找到了一些使用的教程XLib,但是我想使用它XCB.

我想我将不得不打电话xcb_send_event,但是我不知道将它作为参数传递给我.

c c++ x11 xcb

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

argv [0]可以包含空字符串吗?

在任何C程序中,命令行参数argv[0]指向用于调用程序的名称.是否存在任何指向空字符串的情况""

这种情况的示例代码片段将是一个很好的参考.

c argv

8
推荐指数
3
解决办法
5387
查看次数

为什么dart生成的javascript文件如此庞大?

我有以下飞镖码:

$ cat helloworld.dart
main() => print('Hello world!');
$ 
Run Code Online (Sandbox Code Playgroud)

dart编译器为上面代码生成的javascript代码如下:

$ cat helloworld.dart.app.js 
function native_ListFactory__new(typeToken, length) {
  return RTT.setTypeInfo(
      new Array(length),
      Array.$lookupRTT(RTT.getTypeInfo(typeToken).typeArgs));
}
function native_ListImplementation__indexOperator(index) {
  return this[index];
}
function native_ListImplementation__indexAssignOperator(index, value) {
  this[index] = value;
}
function native_ListImplementation_get$length() {
  return this.length;
}
function native_ListImplementation__setLength(length) {
  this.length = length;
}
function native_ListImplementation__add(element) {
  this.push(element);
}
function native_BoolImplementation_EQ(other) {
  return typeof other == 'boolean' && this == other;
}
function native_BoolImplementation_toString() {
  return this.toString();
}

<snapped>

var static$uninitialized = {};
var …
Run Code Online (Sandbox Code Playgroud)

javascript dart dart2js

8
推荐指数
3
解决办法
2478
查看次数

哪个c/c ++库可用于处理linux的wifi连接?

我想实现WiFi管理程序,它应该处理以下内容.

  • 关于Wi-Fi接入点的通知已经过去了
  • 提供可用的WiFi接入点的信息
  • 与给定的Wi-Fi接入点连接/断开连接

哪个是Linux推荐的C/C++ WiFi库来实现这个目标?

c c++ linux wifi

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