【发布时间】:2015-04-24 20:48:11
【问题描述】:
我正在尝试编写自己的 strcat 版本(我称之为“附加”)。这是我所拥有的:
#include <stdio.h>
int main() {
char *start = "start";
char *add = "add";
append(start, add);
printf(start);
}
void append(char *start, char *add) {
//get to end of start word
char *temp = &start;
while (*temp != '\0') {
temp++;
}
*temp = *add;
while (*temp != '\0') {
*temp = *add;
}
}
当我编译时,我收到 3 个警告和一个错误:
1) 警告:函数 'append' 的隐式声明在 C99 中无效
2) 警告:格式字符串不是字符串文字(可能不安全)
3) 错误:'append' 的类型冲突
我看不到我在 main 中传递给 append 函数的参数如何与它下面的函数定义冲突。
4) 警告:使用 'char **' 类型的表达式初始化 'char *' 的指针类型不兼容;删除 &
我为什么要在这里删除&?我想我可以一次声明并初始化我的 char 指针到正确的内存地址。
非常感谢任何帮助。
【问题讨论】:
-
你不能那样做。一方面,字符串文字可能位于只读内存中。另一方面,
start中不会有任何备用内存来附加add。更多 -char *temp = &start;应该是char *temp = start;,因为你已经获得了一个指针。 -
@hacks 先生,您击败了 my 26 line answer just 1 line。 :-)
标签: c string pointers c99 implicit-declaration