有人可以帮我解决这个问题。
char * repeat(char * s,int x)
返回一个新字符串,该字符串由重复x次的s字符组成。例如,如果s是字符串,则该函数可以正确地返回新字符串。如果s为NULL,则该函数返回NULL。
由调用者释放该函数分配的任何内存。
这是我到目前为止所拥有的......
char * repeat(char * s,int x){
int i;
int count = 0;
while(s[count] != '\0')
{
count++;
}
int repeat = count * x;
char *newArray = malloc(5000);
for(i = 0; i < repeat; i++)
{
while(*s != '\0')
*newArray++ = *s++;
}
return (char*)newArray;
}
答案 0 :(得分:0)
char *repeat(const char *s, int x){
if(s){
int i, count = 0;
while(s[count] != '\0'){
++count;
}
char *newArray = malloc(count * x + 1);
if(newArray){
char *na = newArray;
for(i = 0; i < x; ++i) {
const char *p=s;
while(*p)
*na++ = *p++;
}
*na = '\0';
}
return newArray;
} else {
return NULL;
}
}
答案 1 :(得分:0)
主要问题 - 假设您只获得一份副本 - 是您需要&#34;重置&#34;你的副本之间的指针s
。现在,你到了s
的末尾,所以连续的迭代试图复制"\0"
的字符串。
两个潜在的其他问题(未来)是:
strcpy()
进行复制。repeat()
的堆上,因此当您返回时,运行时没有义务保留任何调用者使用它。它通常有效,&#34;但这可能是非常危险的。答案 2 :(得分:-2)
首先分配内存然后复制/移动内存。 供您参考,一个简单的(不完全测试):
char *repeat(char *s, int x)
{
char *result = malloc(sizeof(s) * x + 1);
while (x > 0) {
strcat(result, s);
x --;
}
return result;
}
int main(int argc, const char * argv[])
{
// insert code here...
char *sample = "hell";
char *result = repeat(sample, 3);
printf("result : %s\n", result);
free(result);
return 0;
}
你最好:
x
应该是整数且大于0; free
创建的字符串