c ++ char数组:a [i] = b [i]失败

use*_*721 1 c++ char

我有一些麻烦试图将char复制到char ...

这是args []的定义:

char* args[6];
if (1 == ParseQuery(request, &args[0])) ....

#note : args[ARG_DATE] = "201204090600"
Run Code Online (Sandbox Code Playgroud)

这是定义:

struct date {
  char a[4];
  char m[2];
  char j[2];
  char h[4];
};

date d;
Run Code Online (Sandbox Code Playgroud)

这就是我想要做的:

int TileServe::ParseQuery(FastCGIRequest& request, char** args) {

for (int i=0; i<4; i++) {
  d.a[i] = args[ARG_DATE][i];
  d.h[i] = args[ARG_DATE][i+8];
}
for (int i=0; i<2; i++) {
  d.m[i] = args[ARG_DATE][i+4];
  d.j[i] = args[ARG_DATE][i+6];
}

strcat(filename, "/");
strcat(filename, d.a);
strcat(filename, "/");
strcat(filename, d.m);
...
printf("%s\n", filename);
Run Code Online (Sandbox Code Playgroud)

我明白了:

./data/alpes/201204090600/04090600/090600/0600/alpes_201204090600.nc
Run Code Online (Sandbox Code Playgroud)

我期待着 :

./data/alpes/2012/04/09/06/alpes_201204090600.nc
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么 ?

And*_*zos 7

大多数C函数都期望以null结尾的字符串.你的子串(da,dm,...)不是以null结尾的.因此strcat,将所有内容追加到你的子串之后它在内存中找到的第一个空字符.

一个解决方法是将char数组延长一个,并将'\0'字符放在子字符串的末尾.

另一种解决方法是使用strncat而不是strcat追加指定数量的字符.