小编Min*_*any的帖子

malloc一个struct指针数组

我有以下结构:

typedef struct _chess {
   int **array;
   int size;
   struct _chess *parent;
} chess;
Run Code Online (Sandbox Code Playgroud)

我有:

typedef struct _chess *Chess;
Run Code Online (Sandbox Code Playgroud)

现在,我想创建一个动态长度数组来存储指向ARCH结构的指针,所以我执行以下操作:

Chess array [] = malloc(size * sizeof(Chess));
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误:初始化程序无效.

如果我放弃[]并执行此操作:

Chess array = malloc(size * sizeof(Chess));
Run Code Online (Sandbox Code Playgroud)

它编译没有错误,但当我尝试通过执行以下操作将此数组的元素设置为NULL:

array[i]=NULL;
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:从类型'void*'分配类型'struct _chess'时出现不兼容的类型

知道我做错了什么吗?谢谢.

c arrays malloc struct pointers

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

sscanf不移动,每次扫描相同的整数

我有一个包含整数的字符串,我正在尝试将所有内容放入另一个数组中.当sscanf找不到int我想要循环停止时.所以,我做了以下事情:

int i;
int getout = 0;
for (i = 0; i < bsize && !getout; i++) {
    if (!sscanf(startbuffer, "%d", &startarray[i])) {
        getout = 1;
    }
}
//startbuffer is a string, startarray is an int array.
Run Code Online (Sandbox Code Playgroud)

这导致将所有元素startarray作为第一个char startbuffer. sscanf工作正常但它不会移动到下一个int它只是停留在第一个位置.

知道什么是错的吗?谢谢.

c string input scanf

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

校验和是否为整数数组?

我有一个大小为4,9,16或25的数组(根据输入)并且数组中的数字相同但少一个(如果数组大小为9则数组中的最大元素将是8)数字从0开始, 我想做一些算法来为数组生成某种校验和,这样我就可以比较2个数组是否相等,而不是遍历整个数组并逐个检查每个元素.

我在哪里可以获得这类信息?我需要一些尽可能简单的东西.谢谢.

编辑:只是为了清楚我想要的东西:

- 数组中的所有数字都是不同的,因此[0,1,1,2]无效,因为存在重复的元素(1)

- 数字的位置很重要,所以[0,1,2,3]与[3,2,1,0]不一样

- 数组将包含数字0,因此这也应该被考虑在内.

编辑:

好吧,我试着在这里实现Fletcher的算法:http: //en.wikipedia.org/wiki/Fletcher%27s_checksum#Straightforward

int fletcher(int array[], int size){
  int i;
  int sum1=0;
  int sum2=0;
  for(i=0;i<size;i++){
    sum1=(sum1+array[i])%255;
    sum2=(sum2+sum1)%255;
  }
  return (sum2 << 8) | sum1;
}
Run Code Online (Sandbox Code Playgroud)

说实话,我不知道返回线做了什么但不幸的是,算法不起作用.对于数组[2,1,3,0]和[1,3,2,0],我得到相同的校验和.

EDIT2:

好的,这是另一个,Adler校验和 http://en.wikipedia.org/wiki/Adler-32#Example_implementation

#define MOD 65521;

unsigned long adler(int array[], int size){
  int i;
  unsigned long a=1;
  unsigned long b=0;
  for(i=0;i<size;i++){
    a=(a+array[i])%MOD;
    b=(b+a)%MOD;
  }
  return (b <<16) | a;
}
Run Code Online (Sandbox Code Playgroud)

这也行不通.数组[2,0,3,1]和[1,3,0,2]生成相同的校验和.我在这里失去了希望,任何想法?

arrays algorithm checksum compare

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

找出减慢C程序速度的工具?

我有一个程序,由几个.h和.c文件和许多函数组成.还有一些功能可以调用其他功能等.现在,这实际上是一项任务,所以我知道该计划需要多长时间才能达到目的.

问题是,与我给出的时间相比,我的程序花费了太多时间.是否有可能找出哪个函数花费了太多时间或者代码的哪个部分使程序停止运行?


我没有在这里给出代码,因为它太长了.我知道没有人能回答为什么"我的节目"很慢但我说话一般!是否有工具可以衡量每个功能需要多长时间或类似的功能?我正在使用gcc,我在Linux上.

c performance time

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

获取Hashtable中的最小值密钥

我在java中有一个Hashtable,如下所示,我正在尝试获取具有最小值的密钥.显然我可以遍历所有元素来找到它但是有更简单的方法吗?

Hashtable<Object, Integer> hash= new Hashtable<Object, Integer>();
Run Code Online (Sandbox Code Playgroud)

java hash

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

调用rand()返回非随机结果

我正在编写一个简单的C程序,它将硬币投掷100000次并计算使用srand和rand投掷多少个头和多少尾巴.这是我有的:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void){

    int i;
    int h=0;
    int t=0;
    int n;

    for(i=0;i<100000;i++){
        srand(time(NULL));
        n=rand()%2;
        if(n==0){
            h++;
        }
        else {   
            t++;
        }
    }

    printf("%d heads\n", h);
    printf("%d tails\n", t);

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

然而,在运行程序时,我有时会获得100000个头和0个尾部,有时会有0个头和100000个尾部,有时我会在头部和尾部得到随机数,但不会有任何50%的头部50%尾部.

我错过了什么吗?谢谢!

c

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

mmap 上的 ValueError - Python

我正在尝试映射这样的文件:

f= open('file.txt', 'r')
data= mmap.mmap(f.fileno(), 0)
Run Code Online (Sandbox Code Playgroud)

但我得到:

 data= mmap.mmap(f.fileno(), 0)
ValueError: mmap offset is greater than file size
Run Code Online (Sandbox Code Playgroud)

搜索后,我仍然无法弄清楚出了什么问题,奇怪的是,这在半小时前就起作用了!有什么帮助吗?

python mmap

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

硒用换行符execute_script

我正在使用selenium和Python,并且试图执行一个包含如下字符串的JS函数:

browser.execute_script("foo('someString')")
Run Code Online (Sandbox Code Playgroud)

当someString没有换行符时,此方法有效。当有换行符时,将发生以下情况:

\n     => Parse Error
\\n    => Newline is converted to a space
\r\n   => Parse Error
\\r\\n => Both characters are converted to a space
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

javascript python string selenium

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

scanf() 读取减号并且不将其放回

我试图从命令行读取非负数或减号,如果输入不是其中之一,程序将终止,所以我执行了以下操作:

while((scanf("%d", &n)==1 && n>-1 && (input=1)) || (scanf("%c", &delete)==1 && delete=='-' && (input=2)))
Run Code Online (Sandbox Code Playgroud)

input是一个整数,表示读取的是数字或减号(input=1&input=2在循环中是有意的)。

现在,该程序适用于数字,但如果我输入一个减号,第一个程序scanf()会读取它,但不会将其明显地放回去,因此第二个scanf()程序找不到任何内容并终止程序。

但是,如果我输入--(两个减号),第一个scanf()读取一个,第二个scanf()读取另一个,并且一切正常。

命令行的输入不能更改,它必须是一个减号。解决这个问题的最佳方法是什么?

请注意,我确实知道如何使用getchar()读取输入然后检查它,但我不想这样做很麻烦。

c command-line input scanf

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

shell的&&和|| 在python中

在shell中,如果我只想在第一个命令成功时执行第二个命令,我会这样做

cmd1 && cmd2
Run Code Online (Sandbox Code Playgroud)

如果我需要执行第二个命令,如果第一个命令失败,我会这样做

cmd1 || cmd2
Run Code Online (Sandbox Code Playgroud)

我在python脚本中通过subprocess.call调用命令列表.我怎么能做到这一点?

python shell command

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

将自己设置为null - Java

我遇到了以下问题:

删除单链表中间的节点,只允许访问该节点.(没有给出头)现在有很多解决方案,当要删除的元素是最后一个节点时它们都不起作用.

为什么这不起作用?

public static void removeNode (Node n){
    if(n.next == null){ //n is the last node
        n= null;
        return;
    }
    //handling general case here
}
Run Code Online (Sandbox Code Playgroud)

java null linked-list

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

将选项添加到Perl程序中

我一直在谷歌搜索一段时间,奇怪的是没有找到任何回答我的问题的东西.

我想将-n作为选项传递给程序,其中n是整数.

这就是我所拥有的:

if($ARGV[0] eq "-A_NUMBER")
Run Code Online (Sandbox Code Playgroud)

我可以使用某种类型的通配符吗?那么任何整数(或字符)后面的任何减号都适用条件?

perl command-line arguments

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