【发布时间】:2019-01-26 12:30:57
【问题描述】:
我被要求在不使用库和指针的情况下从 string.h 构建 strcat。
到目前为止我有这个,但不知何故它不起作用:
void strcatO(char a[], char b[])
{
int i = 0;
for(i = 0; i < strlen(b); ++i)
{
a[strlen(a) + i + 1] = b[i];
}
printf("%s", a);
}
输出:
【问题讨论】:
-
请注意,当您声明像
char a[]这样的参数时,编译器真正将其视为char *a。所以不,没有指针你就不会这样做。 -
猜你是对的
-
strlen()是来自图书馆。a和b确实都是指针,即使它们的声明看起来像数组。实际上,如果你的老师告诉你不是,请他解释为什么你的strcat()中的sizeof( a )将总是等于sizeof( char * ),无论 调用函数是。归根结底,由于您用作函数调用的参数的 任何 数组将 退化为指针,因此您的老师对他/她的学生进行了这样的表述任务,这是一种伤害。答案是,“这做不到,我能做的就是在没有*的情况下编写它。” -
我事先在另一个函数中构建了 strlen,现在我得到了指针,谢谢!!
-
@PeterA.Schneider:在
void f(int arr[5]);中,不清楚数组长度是否被忽略。一些编译器评估数组大小表达式(之后丢弃该值)。例如,对于 Apple LLVM 10.0.0 clang-1000.11.45.5,void f(int arr[printf("Hello, world.\n")]) {} int main(void) { f(0); }打印“Hello, world”。
标签: strcat string.h c strcat string.h