我已经看到了"不透明类型"的概念,但我真的没有找到一个简洁的答案,关于什么定义了C中的opaque类型,更重要的是它们允许我们用它们的存在解决的问题.谢谢
我正在一个非常古老的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) 如果我使用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[]
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) 我在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
我有一个公共库,我使用几个解析命令行选项的脚本,但是我也希望我的个人脚本能够处理参数...例如
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"处理,因为它停在第一个"非选项"
没有改写自己的东西吗?
我正在使用GLUTesselator并且每隔一段时间EndContour()失败所以我这样做了:
try
{
PolygonTesselator.End_Contour();
}
catch (int e)
{
renderShape = false;
return;
}
Run Code Online (Sandbox Code Playgroud)
为什么它仍会崩溃,它应该执行捕获代码吗?我怎么能解决这个问题?
谢谢
这个很奇怪.希望我会问正确的问题:
我正在使用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字符串的编码有关.
任何知识!?
谢谢,
来自新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
在我阅读的书中看到了这个例子,它对我来说根本没有意义,我可能错过了一些东西,但似乎你用值'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)