小编Alo*_*hal的帖子

什么定义了C中的opaque类型,它们何时是必需的和/或有用的?

我已经看到了"不透明类型"的概念,但我真的没有找到一个简洁的答案,关于什么定义了C中的opaque类型,更重要的是它们允许我们用它们的存在解决的问题.谢谢

c types

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

Python C扩展链接与自定义共享库

我正在一个非常古老的Red Hat系统上编写Python C扩展.系统具有zlib 1.2.3,它不能正确支持大文件.不幸的是,我不能只是将系统zlib升级到更新的版本,因为一些软件包会进入内部zlib结构并且会破坏新的zlib版本.

我想建立自己的扩展,使所有的zlib的调用(gzopen(),gzseek()等)解析为我安装在我的用户目录中的自定义zlib的,不影响Python可执行程序和其他扩展的其余部分.

我已尝试libz.a通过libz.a在链接期间添加到gcc命令行来静态链接,但它不起作用(仍然无法使用gzopen()例如创建大文件).我也尝试过传递-z origin -Wl,-rpath=/path/to/zlib -lz给gcc,但那也行不通.

由于zlib的新版本仍然被命名zlib 1.x,所以soname它是相同的,所以我认为符号版本控制不起作用.有办法做我想做的事吗?

我在32位Linux系统上.Python版本是2.6,它是定制的.

编辑:

我创建了一个最小的例子.我正在使用Cython(版本0.19.1).

档案gztest.pyx:

from libc.stdio cimport printf, fprintf, stderr
from libc.string cimport strerror
from libc.errno cimport errno
from libc.stdint cimport int64_t

cdef extern from "zlib.h":
    ctypedef void *gzFile
    ctypedef int64_t z_off_t

    int gzclose(gzFile fp)
    gzFile gzopen(char *path, char *mode)
    int gzread(gzFile fp, void *buf, unsigned int n) …
Run Code Online (Sandbox Code Playgroud)

python zlib shared-libraries cython

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

char**s与char*s [],何时以及如何使用每一个?

如果我使用char *s[],我可以执行以下操作:

char *s[] = {"foo", "bar", "foobar", "whatever", "john", "doe"};
Run Code Online (Sandbox Code Playgroud)

有什么区别**s?我如何使用char **s而不是char *s[]在那种情况下?

示例:int main (int argc, char **argv)代替*argv[]

c pointers char

6
推荐指数
2
解决办法
2934
查看次数

'const struct list :: SingleList'的前向声明,无效使用不完整类型'list :: SingleList'(编译错误)

SingleList.h

#include "ListBase.h"
#include "DataNode.h"
#include "SingleListIterator.h"

namespace list
{
    class SingleListIterator;
    class SingleList : public ListBase
    {
        private:
            DataNode *head;
            DataNode *tail;
        public:
            SingleList();
            SingleList(const SingleList &obj);
            ~SingleList();
            void Flush(); //deletes all elements in the list
            void PushInFront(const int data); // **
            void Append(const int data); // **
            void DeleteLast();
            void DeleteFirst();
            int Delete(const int& data); // ** remove the first occurrence of data and return 1 otherwise 0
            const int& GetFirst() const; // **
            int& GetFirst(); // ** …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors

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

strndup调用正在破坏堆栈帧

我在AIX 5.3和6.1上看到了"strndup"调用的奇怪行为.如果我调用大小超过实际源字符串长度大小的strndup,那么在该调用之后会出现堆栈损坏.

以下是可能出现此问题的示例代码:

int main ()
{
    char *dst_str = NULL;
    char src_str[1023] = "sample string";

    dst_str = strndup(src_str, sizeof(src_str));

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

有没有人经历过这种行为?

如果是,请告诉我.

根据我的观察,必须有来自操作系统的补丁,这个问题得到解决.但如果有任何补丁,我无法得到那个补丁.请多点亮一点.

谢谢和问候,Thumbeti

c aix

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

如何多次调用bash中的getopts

我有一个公共库,我使用几个解析命令行选项的脚本,但是我也希望我的个人脚本能够处理参数...例如

common.sh:

function get_options {
    echo -e "in getoptions"
    echo $OPTIND
    while getopts ":ab:" optionName; do
       [ ... processing code ... ]
    done
}
Run Code Online (Sandbox Code Playgroud)

. ./common.sh

function get_local_options {
    echo -e "in getoptions"
    echo $OPTIND
    while getopts ":xy:" optionName; do
       [ ... processing code ... ]
    done
}

get_local_options $*
OPTIND=1
get_options $*
Run Code Online (Sandbox Code Playgroud)

问题是,如果我用a调用a.sh:

a.sh -x -y foo -a -b bar
Run Code Online (Sandbox Code Playgroud)

get_options停止在"foo"处理,因为它停在第一个"非选项"

没有改写自己的东西吗?

bash getopt

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

帮助Try Catch

我正在使用GLUTesselator并且每隔一段时间EndContour()失败所以我这样做了:

         try
        {
            PolygonTesselator.End_Contour();
        }
        catch (int e)
        {
            renderShape = false;
            return;
        }
Run Code Online (Sandbox Code Playgroud)

为什么它仍会崩溃,它应该执行捕获代码吗?我怎么能解决这个问题?

谢谢

c++ opengl

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

使用Objective C从文件中读取字符串

这个很奇怪.希望我会问正确的问题:

我正在使用md5方法创建校验和值,然后我将其写入文件.然后我用这个读取文件:

NSString * id_From_File = [[NSString alloc]
                                  initWithContentsOfFile:path_to_ID
                                  encoding:NSUTF8StringEncoding
                                  error:&error];
Run Code Online (Sandbox Code Playgroud)

结果放在NSString中,当我打印时给我非常奇怪的行为.例如,当我使用它来打印时,

id_with_date = [NSString stringWithFormat:@"  %@  %@", dateString, id_From_File];
Run Code Online (Sandbox Code Playgroud)

如果在第一个参数中放置dateString而在第二个参数中放置id_From_File,它将打印两个字符串.如果我切换它们(我需要做),只有id_From_File显示.

编辑1:开关示例:

id_with_date = [NSString stringWithFormat:@" %@  %@", id_From_File, dateString];
Run Code Online (Sandbox Code Playgroud)

我坚信这与id_From_File字符串的编码有关.

任何知识!?

谢谢,

string cocoa file objective-c

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

初始化大型双数组的问题

来自新C程序员的愚蠢问题......我在以下代码中遇到了分段错误:

#include <stdio.h>
int main(void)
{
double YRaw[4000000]={0}; 
return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用GDB,我收到以下评论:

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00007fff5dd7b148
0x0000000100000f24 in main () at talk2me.c:18
18 double YRaw[4000000]={0}; // set YRaw[memdepth] so index is 0 to memdepth-1
Run Code Online (Sandbox Code Playgroud)

如果我将YRaw阵列的大小减小10倍,那么一切都能找到.系统中有6GB的RAM,为什么我会收到错误?谢谢,Gkk

c arrays initialization

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

这是错的还是我错过了什么(int count = 10,x;)

在我阅读的书中看到了这个例子,它对我来说根本没有意义,我可能错过了一些东西,但似乎你用值'10'分配计数,然后是值'x',这是不均匀的一个int.只是想知道这是否是有效的语法.

这本书说:

变量count和x以正常方式声明为整数变量.在下一行,变量intPtr被声明为"指向int的指针".请注意,这两行声明可以组合成一行:

int count = 10, x, *intPtr;
Run Code Online (Sandbox Code Playgroud)

这是程序取自:

#import <Foundation/Foundation.h>
int main (int argc, char *argv[ ])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    int count = 10, x;

    int *intPtr;

    intPtr = &count;

    x = *intPtr;

    NSLog (@"count = %i, x = %i", count, x);

    [pool drain];

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

c objective-c variable-assignment assignment-operator

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