有人可以帮我解决这个问题。我需要将这两个指针附加在一起,但它不适用于我。代码不会将指针添加到一起。我认为* mystrcat函数是错误的。
// stringAdds.cpp : Defines the entry point for the console application.
//
char *mystrcat(char *s, char *p);
int _tmain(int argc, _TCHAR* argv[])
{
char myChar = 0;
int i = 0;
char *s = (char*) malloc (1);
char *p = (char*) malloc (1);
printf("Input s: ");
while ((myChar=getchar()) != '\n')
s[i++]=myChar;
s[i]='\0';
//scanf("%s", &s);
printf_s("%s", s);
printf("\nInput p: ");
i = 0;
while ((myChar=getchar()) != '\n')
p[i++]=myChar;
p[i]='\0';
printf_s("%s\n", p);
printf_s("return string: %s", mystrcat(s,p));
}
char *mystrcat(char *s, char *p)
{
int sizeOfs = 0;
int sizeOfp = 0;
int sizeZero = 0;
while(*s!='\0')
{
sizeOfs++;
}
while(*p!='\0')
{
sizeOfp++;
}
for( int i=0; i<sizeOfp; i++)
{
s[sizeOfs++]=p[sizeZero++];
}
s[sizeOfs]='\0';
return s;
}
答案 0 :(得分:3)
由于这可能是一项功课,这里有一些提示:
内部mystrcat
while(*s!='\0')
是一个无限循环,因为s
不会在循环体内发生变化p
s
以便您可以返回其值s
移动到字符串的末尾
p
个字符复制到新s
指针所指向的字符,直到您点击'\0'
外mystrcat
mystrcat
函数假定s
有足够的空间来存储s
的所有字符,p
的所有字符以及空终止符。您的代码malloc
的空间足以容纳空终止符。您需要更改逻辑以提供更多空间。malloc
的所有内容必须为free
d。 答案 1 :(得分:1)
你的malloc只有1个字节,但你可能会将很多字符放入* s和* p。在将每个字符放入数组之前,您至少需要存储每个字符的存储空间。
答案 2 :(得分:0)
你的意思是这个吗?我认为你的例子中有一些缺失的引用。
char *strcat (char *dest, const char *src)
{
char *dp;
char *sp = (char *)src;
if ((dest != NULL) && (src != NULL))
{
dp = &dest[strlen(dest)];
while (*sp != '\0')
{
*dp++ = *sp++;
}
*dp = '\0';
}
return dest;
}
答案 3 :(得分:0)
正确的代码:
char *ss=s;
while(*ss!='\0')
{
sizeOfs++; ss++;
}
char *pp=p;
while(*pp!='\0')
{
sizeOfp++; pp++;
}
你基本上有一个无限循环。我也会malloc更大的尺寸,以免造成任何内存溢出。
答案 4 :(得分:0)
Jeniffer,我必须承认,这看起来非常相似to the code I mentioned to you before
但是你缺少一些关键要素。
首先,当我做最初的malloc()
时:
char * str1 = malloc(6); // give string 1 some memory
我这样做了,因为我将要放入字符串(在该示例中为“hello”)已经足够了。您正试图动态获取字符串,直到看到'\n'
。因此,如果你想使用这种方法,你将不得不分配“足够大”的东西。
char *s = (char*) malloc (1);
这不能“足够大”,因为字符串必须至少有一个字符和'\0'
的空间,否则它不是字符串,只是一个字符。 :)
你真的无法确定“足够大”是什么,所以如果字符串大小上没有上限,那么只要抓住一些内存并获得更多,如果你接近过度流动它:
char *s = (char*) malloc (50); //That's better, room for some char's
你错过的第二点,在mystrcat()
函数中,看到我放在那里的行:
// We need more memory for s, it was only made to hold its own string so :
s = realloc(s, length of s + length of p + 1); // +1 for NULL terminator
你可以read up on realloc()但基本上它可以给你更多的记忆。当你连接你的字符串时,你可能需要获得更多的内存。这是计算a
和p
的大小的重点。
第三点,我给你的伪代码是:
while(s's character is not '\0')
你正在做什么是行不通的。您需要检查字符串中的字符'\0'
,如:
while(s[counter] != '\0')
并在你去的时候递增计数器。