我在C中有一个重复给定字符串的小程序。但我无法弄清楚为什么函数参数需要有一个const char * src的星号。
这是我的代码......
char *repeat_str(size_t count, const char *src) {
int length = strlen(src);
char* dest = malloc(count * length * sizeof(char));
for (int i = 0; i < count; i++) {
strcpy(dest + i * length, src);
}
return dest;
}
当我删除星号作为测试时,我收到错误,说星号是预期的,但我不理解为什么会这样解释。
答案 0 :(得分:0)
看一下指针声明符的正式解释:6.7.6.1 declarators。
char *src
是一项C约定,其中src
是char pointer
。
在下面的程序中,它指向string literal
持有4
个字符123_
和字符串终结符\0
。
字符串的长度为4
。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
// `repeat_str` accepts variable count of type size_t and const char * pointer
char *repeat_str(size_t count, const char *src) {
size_t length = strlen(src); // get the length
char* dest = malloc(count * length * sizeof(char) + 1); // you need 1 more character for the `null` termination of the dest string
for (size_t i = 0; i < count; i++) {
strcpy(dest + i * length, src);
}
return dest; // return pointer
}
int main() {
const char *src = "123_"; // pointer declaration
char *p; // pointer declaration
p = repeat_str(3,src);
printf(" %s", p);
return 0;
}
输出:
123_123_123_