Tag: objective c

该计划的产出?

#include int fun(int, int); typedef int (*pf) (int, int); int proc(pf, int, int); int main() { printf(“%d\n”, proc(fun, 6, 6)); return 0; } int fun(int a, int b) { return (a==b); } int proc(pf p, int a, int b) { return ((*p)(a, b)); } //程序的直接链接: http : //codepad.org/fBIPiHGT

如何创建此int值并进行处理?

例如,我有这些int值。 int map1[10][10] = //; int map2[10][10] = //; int map3[10][10] = //; int map4[10][10] = //; int map5[10][10] = //; for (int i = 1 ; i < 6 ; i++) map{i}[2][2] = 3; 上面的代码只是为了说明/理解,我知道这是错误的。 如何选择/访问我的int ?

scanf是不是在循环中等待输入?

我是Objective-C的新手,这是我的第一个交互式程序。 我已经学习了大约两个星期了。 所以,我的问题是:通常我注意到当你连续多个scanf时,他们每个都在等待输入 – 但是在这种情况下,我要求帐户所有者名称和余额 – 它会触发两个NSLog函数而不是等待第一次输入。 这是我的主要内容: int main(int argc, char* argV[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; bank *columbiaBank = [[bank alloc] init]; int iteration = 0; while (true) { int selection = 0; NSLog(@”\n1. Add Account \n2. Remove Account \n3. Modify Account \nWhat would you like to do?:”); scanf(“%i”, &selection); […]

memcpy导致’exc bad access’

我试图循环一个数组并复制数据,但在1023循环后,我得到一个exc bad access消息抛出,我感觉它可能与我的记忆有关。 在我的循环中,我需要将数据附加到我的totalValues数组,所以我这样做: memcpy(totalValues + totalCopied, tempBuffer, 600 * sizeof(float)); 这是在一个循环中完成的,并且totalCopied会跟踪已经将多少数据附加到totalValues以便我知道在循环再次点击memcpy时从哪里写入。 我不确定为什么会出现“错误访问”错误,但我的理论是内存不连续,因此, totalValues + totalCopied行可能会造成麻烦。 我不确定在这种情况下是否会抛出错误,或者无论如何都会覆盖内存。 有趣的是,它总是发生在1023循环之后。 如果我删除’memcpy’行,程序循环没有任何问题。 可能导致这种情况的任何想法? 编辑 – 原因是内存分配是硬编码为另一个文件。 通常,在内存分配之前我不知道文件的长度,那么如何确保在运行时分配足够的内存?

如何在objective-c项目中使用纯C文件?

简单的问题: 我创建了一堆C helper例程,并试图将它们包含在项目中。 我曾假设以下内容可以。 MyFuncs.h typedef struct { float n; } MyStruct; float Operation(MyStruct ms); MyFuncs.m #import “MyFuncs.h” float Operation(MyStruct ms) { return ms.n * ms.n; } 但是,我收到链接器错误“架构i386的未定义符号”和“从x引用的操作(MyStruct)” 还有其他方法需要设置标头/实现C文件才能工作吗? 注意:这适用于使用Xcode 4.5的iOS项目。

运算符’重载’等效于C / Objective-C中的#define

可能重复: 运算符在C中重载 如果我有一个结构: typedef struct myStruct { … } myStruct; myStruct myStructAdd(myStruct a, myStruct b); 我需要这样的东西: #define myStruct a + myStruct b myStructAdd(a, b) // NOTE this code does NOT WORK. This is what the question is asking. 要使此语法有效: myStruct a; myStruct b; myStruct c = a + b; 有没有办法使用#define来做到这一点? 编辑: 我不是要求+语法的替代品。 我要问的是,是否以及如何使用预处理器在编译时将plus语法重写为标准C语法。 例如#define myStruct […]

如何使用libstrophe构建一个jabber客户端

我正在尝试使用libstrophe库创建一个简单的Jabber客户端。 到目前为止,情况相当顺利,除了一件我需要澄清的事情。 也就是说,我应该如何(持续)知道联系人的状态(即在线/离线),以便我可以将其显示给我的程序用户? 同样,我该如何申请用户名单? 我查看了roster.c提供的roster.c示例,但只打印出一次名单。 在实际应用程序中,我需要连续请求/更新,以便在应用程序中显示用户添加的任何新联系人等。 所以基本上,我不清楚如何确保我总是在用户的联系人列表中显示最新的名单和最新状态。 我是否应该在某个预定义的时间间隔内请求名册?

以线程安全的方式从环形缓冲区复制目标C中的数据

我对这段代码的结果感到困惑: 在一个线程中,我正在写入环形缓冲区(请参阅此处的环形缓冲区的实现): – (void)appendToRingBuffer:(Packet *)packet { int32_t length = ((PacketAudioBuffer *)packet).totalSize; void *writePointer; bytesAvailableToWrite = [ringBuffer lengthAvailableToWriteReturningPointer:&writePointer]; memcpy(writePointer, [((PacketAudioBuffer *)packet).audioBufferData bytes], length); [ringBuffer didWriteLength:length]; //updates ring buffer head pointer } 在另一个线程中,我正在读取它(并将数据复制到NSData变量): -(BOOL)readFromRingBuffer { void *readPointer; allBytesAvailable = [ringBuffer lengthAvailableToReadReturningPointer:&readPointer]; ringBufferReadData = [NSData dataWithBytes:readPointer length:allBytesAvailable]; [ringBuffer didReadLength:allBytesAvailable]; // purges read data from ring buffer // do […]

Objective-C中的空指针取消引用是否为未定义的行为?

在C和C ++中,空指针取消引用是未定义的行为。 Objective-C怎么样? 换句话说,这个代码保证做什么? *(long*)0 = 0; 背景:我想知道这个答案是否可能触发未定义的行为,可能导致随机的事情,如声明被优化或甚至更奇怪的东西。 当然,我不认可这样做。 但是,了解语言规则也很重要。

打印双类型结构成员时LLDB中的奇怪行为

在某些iOS代码中,我在一个对象上有一个C struct ivar。 此结构的一个成员是double类型。 如果我在一个方法中,分配给这个struct成员,当我打印struct本身时,调试器会报告这个struct成员的值的虚假值(就像变量的列表视图一样),但是当我直接打印struct成员时, ( p structWithDouble.doubleMember ),我得到了正确的值。 此外,如果我将此成员的值分配给本地自动double变量,我会在列表视图中和打印时看到正确的值。 我认为这是LLDB的一个问题,但令人不安和令人沮丧。 这是一个已知的问题? 如果是这样,有解决方法吗? 例子 typedef struct { double doubleMember; } structWithDouble; @interface MyClass : NSObject { structWithDouble structAsIvar; } @end @implementation – (void)someMethod { structAsIvar.doubleMember = 200.0; double localDouble = structAsIvar.doubleMember; } 在someMethod: ,调试器变量列表显示以下值: structAsIvar.doubleMember (double) 1.65865e-307 localDouble (double) 200 在LLDB中,在someMethod:中断时,我得到以下输出: (lldb) p structAsIvar.doubleMember (double) […]