我有一些麻烦试图将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)
我究竟做错了什么 ?
大多数C函数都期望以null结尾的字符串.你的子串(da,dm,...)不是以null结尾的.因此strcat,将所有内容追加到你的子串之后它在内存中找到的第一个空字符.
一个解决方法是将char数组延长一个,并将'\0'字符放在子字符串的末尾.
另一种解决方法是使用strncat而不是strcat追加指定数量的字符.
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |