【发布时间】:2016-05-14 00:31:06
【问题描述】:
我正在尝试制作一个简单的代码示例,其中我可以将一个子字符串转换为一个新字符串。
我的代码如下:
char titulo[20];
char line[] = "PRINCIPAL,1.Liga,2.Clubes,3.Jogadores,4.Relatorios,5.Sair;";
char *pos = strchr(line,',');
memcpy(titulo, line,*pos);
问题在于,当我这样做时:
printf("%s",titulo);
我得到类似的东西:
PRINCIPAL,1.Liga,2.Clubes,3.Jogadores,4.Rela
【问题讨论】:
-
你认为将
*pos传递给memcpy会怎样? -
memcpy 将指向源缓冲区的指针作为第二个参数,将要复制的数据大小作为第三个参数。所以你传递了错误的参数。很可能你应该被编译器警告这一点。
-
titulo是什么?m是什么?你编译时启用了所有警告吗? -
@RafaelBotas:
char * pos使pos成为指向char的指针。这使得*pos...成为char。memcpy()会很高兴地将char的 ASCII 值——0x2c——解释为要复制的字节数。那是您在titulo... 中看到的 44 个字符...并且由于titulo只有 place 20 个字符...您在“未定义行为”国家/地区深 .如果您想要搜索字符串的','的索引,则需要pos - line。 -
@RafaelBotas:请先做检查
pos是否有NULL,以防strchr()找不到您要找的角色。 并且检查pos - line是否适合titulo在进行复制之前。
标签: c string substring memcpy strchr