[英]Creating string concatenation function in C
这是我很困难的硬件任务。 我的任务是创建自己的函数,该函数接受两个字符串,并将两个字符串连接在一起,并返回指向新字符串的字符指针。 这是我目前拥有的:
char * my_strcat(char p[], char t[]) {
printf("Made it into my_strcat.\n");
int size1;
int size2;
size1 = my_strlen(p);
size2 = my_strlen(t);
int size3;
size3 = size1 + size2 +1;
printf("This many characters allocated for in memory: %i\n", size3);
char* MemLoc = (char *)malloc(sizeof(char)*(size1+size2+1));
char* BookMark = MemLoc;
printf("Address of MemLoc: %p\n", MemLoc);
printf("Address of BookMark: %p\n", BookMark);
int count = 0;
while(count < size1) {
*BookMark = p[count];
printf("Address of MemLoc: %p\n", MemLoc);
printf("Latest char: %c\n", *MemLoc);
count++;
BookMark++;
printf("Address of MemLoc: %p\n", MemLoc);
}
count = 0;
while(count < size2) {
*BookMark = t[count];
printf("Latest char: %c\n", *MemLoc);
count++;
BookMark++;
}
*BookMark = '\0';
printf("Concatenated string: %s\n", MemLoc);
return MemLoc;
}
我那里有很多打印语句试图确定我的错误,但是我仍然无法确定它的原因。 根据我的打印类型,我得到的是“ nil”,“ null”,最后一个打印语句什么也没有。 最后的打印语句(我认为)应该是打印最终的串联字符串。
另外,我必须构造my_strlen方法来计算字符串长度。 这可以正常工作,并返回发送的字符串的正确长度值。对解决此方法有何建议?
您可以使用以下形式的printf
printf("built string is '%.*s'\n",size3,MemLoc);
要么
printf("build string is '%.10s'\n",MemLoc);
帮助您调试。 通过对%s格式说明符使用精度限制,可以防止格式转换从未终止的部分构建的字符串的末尾开始。 由于它只是调试,您可能知道测试用例的长度,因此使用固定长度版本确实没有任何危害。
为了帮助您进行调试,您可能还希望
memset(MemLoc,'#',size3);
在您分配它之后,然后再开始构建。 这可以帮助避免与内存中已经存在的垃圾和您对其进行的处理相混淆。
希望通过初始化并散布打印物,希望您能够调试问题。
我同意friz的意见,即逐步输入字符串的+4没有意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.