操纵C风格的字符串?

时间:2010-11-22 23:49:08

标签: c++ char append cstring

嘿所有, 我的问题是,如何将两个C风格的字符串附加到一个?

由于C ++的做事方式(std :: string),我从未接触过C风格的字符串,需要为我当前的开发项目了解更多。例如:

 char[] filename = "picture.png";
 char[] directory = "/rd/";
 //how would I "add" together directory and filename into one char[]?

提前致谢。

6 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

#include <stdlib.h>
#include <string.h>

// ...

char * fullpath;

fullpath = malloc(strlen(directory)+strlen(filename)+1);
if (fullpath == NULL)
{
  // memory allocation failure 
}
strcpy(fullpath, directory);
strcat(fullpath, filename);

答案 2 :(得分:0)

你需要一个足够大的缓冲区,假设你在编译时没有filenamedirectory的大小,你必须在运行时获得,就像这样

char *buf = (char *) malloc (strlen (filename) + strlen (directory) + 1);
if (!buf) { /* no memory, typically */ }
strcpy (buf, filename);
strcat (buf, directory);

答案 3 :(得分:0)

请记住,您的工作级别较低,并且不会自动为您分配内存。你必须分配足够的内存来保存两个字符串加上一个空终止符,然后将它们复制到位。

答案 4 :(得分:0)

请务必声明/分配一个足够大的char数组,以容纳filenamedirectory。然后,使用strcat()(或strncat())作为xxpor建议。

答案 5 :(得分:0)

你必须考虑你的“字符串”实际上是如何在内存中表示的。在C中,字符串是由0字节终止的已分配存储器的缓冲区。

filename  |p|i|c|t|u|r|e|0|
directory |/|r|d|/|0|

您需要的是一个新的内存空间,用于将两个字符串的内存内容复制到最后的0字节。

path      |p|i|c|t|u|r|e|/|r|d|/|0|

这给出了这段代码:

int lenFilename = strlen(filename); // 7
int lenDirectory = strlen(directory); // 4
int lenPath = lenFilename + lenDirectory; // 11 I can count
char* path = malloc(lenPath + 1);
memcpy(path, filename, lenFilename);
memcpy(path + lenFilename, directory, lenDirectory);
path[lenPath] = 0; // Never EVER forget the terminating 0 !

...

free(path); // You should not forget to free allocated memory when you are done

(此代码中可能有一个1分之一的错误,实际上没有经过测试......现在是01:00,我应该去睡觉了!)