最近在写C程序的时候常常遇到“Segmentation fault ”错误,号称“c 指针出现最多的错误”。而这次的错误可以肯定出现在使用sprintf函数时出现了问题。

编译成功通过,但运行时报“Segmentation fault ”错误。

查了一下sprintf函数原型说明:

sprintf() 格式化输出函数(图形)

功能: 函数sprintf()用来作格式化的输出。
用法:此函数调用方式为int sprintf(char *string,char *format,arg_list);
说明:函数sprintf()的用法和printf()函数一样,只是sprintf()函数给出第一个参数string(一般为字符数组),然后再调用outtextxy()函数将串里的字符显示在屏幕上。arg_list为参数表,可有不定个数。通常在绘图方式下输出数字时可调用sprintf()函数将所要输出的格式送到第一个参数,然后显示输出。

函数名: sprintf
功  能: 送格式化输出到字符串中
用  法: int sprintf(char *string, char *farmat [,argument,...]);

sprintf的作用是将一个格式化的字符串输出到一个目的字符串中,而printf是将一个格式化的字符串输出到屏幕
sprintf的第一个参数应该是目的字符串,如果不指定这个参数,执行过程中出现     ”该程序产生非法操作,即将被关闭….”的提示。
因为C语言在进行字符串操作时不检查字符串的空间是否够大,所以可能会出现数组越界而导致程序崩溃的问题。即使碰巧,程序没有出错,也不要这么用,因为早晚会出错。所以一定要在调用sprintf之前分配足够大的空间给buf。

原来我定义query这个变量的时候用了char *query;而没有使用数组分配大小;

改成char query[10000];就OK了~~~

如果仍要使用char *query,可以这样

int lines = 1234;
char *buffer;
if((buffer = (char *)malloc(32)) != NULL)
   sprintf(buffer, “Lines: %d”, lines);
free(buffer);

===========EOF================
参考文章:http://www.programmingforums.org/thread16065.html