有人可以帮助我与此代码.我需要追加这两个指针在一起,但它不为我工作.代码不添加指针在一起.我认为 *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;
}
5条答案
按热度按时间tpxzln5u1#
由于这可能是一个家庭作业,这里有一些提示:
内部
mystrcat
while(*s!='\0')
是一个无限循环,因为s
在循环体内部不会改变p
的大小s
,以便可以返回其值s
移动到字符串的末尾p
的字符复制到新的s
指针所指向的内容中,直到点击'\0'
外部
mystrcat
mystrcat
函数假设s
有足够的空间来存储s
的所有字符,p
的所有字符和一个null终止符。你的代码malloc
有足够的空间来保存null终止符。你需要改变逻辑来提供更多的空间。malloc
的东西必须是free
d。2wnc66cl2#
你的malloc只有1个字节,但是你可能会把很多字符放在 *s和 * p中。在你把它们放在数组中之前,你至少需要为每个字符存储空间。
bqjvbblv3#
你的意思是这个吗?我认为在你的例子中缺少了一些解引用。
8i9zcol24#
正确代码:
你基本上有一个无限循环。我也会malloc更大的大小,以便不造成任何内存溢出。
yftpprvb5#
Jeniffer,我不得不承认,这看起来很像to the code I mentioned to you before
但你忽略了几个关键要素。
首先,当我执行初始
malloc()
时:我这样做是为了有足够的东西来存放我要放入的字符串(在那个例子中是“hello”)。你试图动态地获取字符串,直到你看到一个
'\n'
。所以如果你想使用这种方法,你必须分配一些“足够大”的东西。这不能“足够大”,因为字符串必须至少有一个字符和一个
'\0'
的空间,否则它就不是一个字符串,只是一个字符。你真的不能确定什么是“足够大”,所以如果字符串大小没有上限,那么只要抓住一些内存,如果你接近溢出它,就可以获得更多:
你错过的第二点,在
mystrcat()
函数中,请看我在那里放的行:你可以使用read up on realloc(),但基本上它可以给予你更多的内存。当你连接你的字符串时,你可能需要更多的内存。这就是计算
a
和p
的大小的意义。第三点,我给你的伪代码是:
你这样做是行不通的。你需要用
'\0'
检查字符串中的字符,如下所示:并不断递增计数器。