strtok导致段错误,但不是在单步执行代码时

我是C的新手,我正在尝试将日期/时间字符串拆分为单独的变量。 但是,当我逐行逐步执行gdb中的代码时,它可以工作,但是,当我让它正常运行而没有断点时,它会出错并且我看不清楚原因。 以下是代码: char * dateTimeString = “2011/04/16 00:00”; char dateVar[11]; char timeVar[6]; if (splitTimeAndDateString(dateVar, timeVar, dateTimeString)) { exit(1); } printf(“Date: %s\tTime: %s\n”, dateVar, timeVar); 以下是function int splitTimeAndDateString(char date[11], char time[6], char * dateString) { char *token; token = strtok(dateString, ” “); int i = 0; while (token != NULL) { if (i == 0) […]

从C调用Cocoa API

我不知道这是否可行,但是在普通C中使用代码,是否可以从中调用Cocoa API? 像#include 类的东西,添加相应的库并去寻找它? 谢谢您的帮助

CreateProcess()因访问冲突而失败

我的目标是在我的程序中执行外部可执行文件。 首先,我使用了system()函数,但我不希望向用户看到控制台。 所以,我搜索了一下,发现了CreateProcess()函数。 但是,当我尝试将参数传递给它时,我不知道为什么,它失败了。 我从MSDN中获取了这段代码,并稍作改动: #include #include #include void _tmain( int argc, TCHAR *argv[] ) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); /* if( argc != 2 ) { printf(“Usage: %s [cmdline]\n”, argv[0]); return; } */ // Start the child process. if( !CreateProcess( NULL, // No […]

我可以让GCC警告将过多的类型传递给函数吗?

以下是一些明显有缺陷的代码,我认为编译器应该发出诊断信息。 但是gcc和g++都没有,即使有我能想到的所有警告选项: -pedantic -Wall -Wextra #include short f(short x) { return x; } int main() { long x = 0x10000007; /* bigger than short */ printf(“%d\n”, f(x)); /* hoping for a warning here */ return 0; } 有没有办法让gcc和g++对此发出警告? 另外,您是否有另一个编译器在默认情况下或在相当常见的额外警告配置中对此进行警告? 注意:我正在使用GCC(C和C ++编译器)版本4.2.4。 编辑:我刚刚发现gcc -Wconversion可以解决这个问题,但g++的相同选项却没有,我在这里真的使用C ++,所以我需要一个g++解决方案(我现在想知道为什么-Wconversion没有似乎是这样)。 编辑: http : //gcc.gnu.org/bugzilla/show_bug.cgi? id = 34389建议这可以在g++ 4.4修复……也许? 我还不清楚它是否是同一个问题和/或修复是否真的出现在那个版本中。 也许有4.3或4.4的人可以试试我的测试用例。

在C中有睡眠()的替代方案吗?

在传统的嵌入式编程中,我们将提供如下的延迟函数: for(i=0;i<255;i++) for(j=0;j<255;j++); 在微处理器的视图中,这是sleep()函数的工作原理吗? C中的sleep()函数有替代方法吗?

使用C打开目录

我通过命令行输入接受路径。 当我做 dir=opendir(args[1]); 它不会进入循环…即dir==null … 如何将命令行输入传递给dir指针? void main(int c,char **args) { DIR *dir; struct dirent *dent; char buffer[50]; strcpy(buffer, args[1]); dir = opendir(buffer); //this part if(dir!=NULL) { while((dent=readdir(dir))!=NULL) printf(dent->d_name); } close(dir); } ./a.out /root/TEST is used to run the program.. ./a.out –> to execute the program /root/TEST –> input by the user ie valid path

这个C语句是什么意思?

我遇到过这一行: void (*(*x)(void (*[10])(int *)))(int *) 谁能告诉我它是什么?

从C中的另一个文件访问全局静态变量

在C语言中,我想访问文件范围之外的全局静态变量。 让我知道最好的方法。 其中一种方法是为外部全局变量赋值静态变量的值, 在档案中 static int val = 10; globalvar = val; 在文件bc中 extern globalvar; 但在这种情况下,val(文件ac)中的任何更改都不会在(文件bc)中的globalvar中更新。 请让我知道如何实现同样的目标。 谢谢,Sikandar。

为什么在C中释放struct还有数据?

当我运行此代码时: #include typedef struct _Food { char name [128]; } Food; int main (int argc, char **argv) { Food *food; food = (Food*) malloc (sizeof (Food)); snprintf (food->name, 128, “%s”, “Corn”); free (food); printf (“%d\n”, sizeof *food); printf (“%s\n”, food->name); } 我还是得到了 128 Corn 虽然我已经解放了食物。 为什么是这样? 记忆真的被释放了吗?

宏和function相同的名称

我有以下代码 #define myfunc(a,b) myfunc(do_a(a), do_b(b)) void myfunc(int a, int b) { do_blah(a,b); } int main() { int x = 6, y = 7; myfunc(x,y); return 0; } 我希望预处理器只在调用时扩展函数myfunc。 预处理后所需的代码如下所示: void myfunc(int a, int b) { do_blah(a,b); } int main() { int x = 6, y = 7; myfunc(do_a(x),do_b(y)); return 0; } 问题是函数定义也像这样扩展 void myfunc(do_a(int a), […]