在 C 中实现 strcat 时的奇怪行为
Strange behaviour when implementing strcat in C
我正在尝试自己实现 strcat 函数。这是我的代码:
char *my_strcat(char *dst, const char* src) {
char *tmp = dst;
while(*tmp) {
tmp ++;
}
while(*tmp++ = *src++);
return dst;
}
然而,当我尝试测试这个函数时,我只得到了 src 字符串。 (即我期望得到dst+src,但返回值与src相同)
从代码中我们可以看出,在第一个 while 循环中,我试图将 tmp 指针移动到 dst 的末尾。
然而,
我试着在第一个while循环中加了一个printf,结果什么也没有打印出来,说明连循环都没进
然后我尝试用if (*tmp == '[=12=]') print something
,发现*tmp == '[=13=]'
是真的。
但我很确定 tmp 是一个非空字符串,所以 *tmp
应该指向字符串的第一个字符(我认为)。所以我对此感到困惑。谁能告诉我为什么会这样,我该如何解决?
编辑:
调用代码为
char *subpath = "";
subpath = my_strcat(subpath, path);
path
是从命令中读取的 const char*
。
我需要将值分配回子路径吗?或者只调用 my_strcat
就足够了?
这里有两个问题:
char *subpath = "";
subpath = my_strcat(subpath, path);
- subpath 指向长度为 0 的字符串,space 不足以追加任何内容。
- 子路径指向字符串文字,写入字符串文字是未定义的行为,在现代桌面平台上,您的程序通常会崩溃。
你想要这样的东西:
char subpath[100] = "";
char *foo;
foo = my_strcat(subpath, path);
或者只是
char subpath[100] = "";
my_strcat(subpath, path);
或
char subpath[100] = "Hello ";
my_strcat(subpath, "world!");
printf("%s\n", subpath); // prints Helllo World!
我正在尝试自己实现 strcat 函数。这是我的代码:
char *my_strcat(char *dst, const char* src) {
char *tmp = dst;
while(*tmp) {
tmp ++;
}
while(*tmp++ = *src++);
return dst;
}
然而,当我尝试测试这个函数时,我只得到了 src 字符串。 (即我期望得到dst+src,但返回值与src相同)
从代码中我们可以看出,在第一个 while 循环中,我试图将 tmp 指针移动到 dst 的末尾。 然而,
我试着在第一个while循环中加了一个printf,结果什么也没有打印出来,说明连循环都没进
然后我尝试用
if (*tmp == '[=12=]') print something
,发现*tmp == '[=13=]'
是真的。
但我很确定 tmp 是一个非空字符串,所以 *tmp
应该指向字符串的第一个字符(我认为)。所以我对此感到困惑。谁能告诉我为什么会这样,我该如何解决?
编辑: 调用代码为
char *subpath = "";
subpath = my_strcat(subpath, path);
path
是从命令中读取的 const char*
。
我需要将值分配回子路径吗?或者只调用 my_strcat
就足够了?
这里有两个问题:
char *subpath = "";
subpath = my_strcat(subpath, path);
- subpath 指向长度为 0 的字符串,space 不足以追加任何内容。
- 子路径指向字符串文字,写入字符串文字是未定义的行为,在现代桌面平台上,您的程序通常会崩溃。
你想要这样的东西:
char subpath[100] = "";
char *foo;
foo = my_strcat(subpath, path);
或者只是
char subpath[100] = "";
my_strcat(subpath, path);
或
char subpath[100] = "Hello ";
my_strcat(subpath, "world!");
printf("%s\n", subpath); // prints Helllo World!