您好,我正在尝试查找- char,然后将最左边的字符放入一个字符串中。这里我希望FUPOPER存储在program_id_DB中,但是当我运行这段代码时,我的输出结果是:
Character '-' found at position 8.prgmid包含FUPOPERL <-它从哪里获得这个l?!?!
char data_DB[]="FUPOPER-$DSMSCM.OPER*.FUP";
char program_id_DB[10];
char program_name_DB_c[ZSYS_VAL_LEN_FILENAME];
char *pos = strchr(data_DB, '-');
if (pos)
strncpy(program_id_DB,data_DB, pos-data_DB);
printf("Character '-' found at position %d.\n", pos-data_DB+1);
printf("The prgmid contains %s\n",program_id_DB);发布于 2011-07-08 03:36:21
您没有初始化program_id_DB,所以它可以自由地包含它想要的任何内容。在开始之前将其设置为零:
memset(program_id_DB, 0, 10);(您需要为memset使用#include <string.h>。)
实际上,您所做的是非常危险的,因为不能保证您传递给printf的字符串是以null结尾的!始终在使用前将数组置零,并将最多9个非空字符复制到其中。
发布于 2011-07-08 03:36:23
您需要放置一个\0来标记字符串的末尾。
一种方法是:在strncpy到它之前先执行memset(program_id_DB, 0, sizeof(program_id_DB));。
发布于 2011-07-08 03:37:01
您必须在program_id_DB字符串的末尾附加一个空终止字符,因为如果您已经复制了N个字符,strncpy不会自动执行此操作(即,在本例中,您总共复制了8个字符,因此如果您复制的字符超过7个,则不会有空终止字符被复制到缓冲区中)。或者在将program-id_DB字符串与strncpy一起使用之前,使用memset将其初始化为零。
https://stackoverflow.com/questions/6616036
复制相似问题