[英]Write strcat() function with pointers
我是C语言上的新手,并且尝试编写类似strcat()
的函数,但未使用它。 我开发了以下功能:
char cat(char *a, char *b) {
int i=0,cont=0,h=strlen(a)+strlen(b);
char c[h]; //new string containing the 2 strings (a and b)
for(i;i<strlen(a);++i) {
c[i] = *(a+i); //now c contains a
}
int j = i;
for(j;j<strlen(b);++j) {
c[j] = *(b+cont); //now c contains a + b
cont++;
}
return c; // I return c
}
这就是我所谓的函数:
printf("\Concatenazione: %c", cat(A,B));
现在可以正常工作,因为最终结果是一个奇怪的角色。 我该如何修复该功能? 这是完整的主体。
从实现中可以看出,您的strcat
版本与标准版本不兼容,因为您希望为结果分配内存,而不是期望调用方为您提供足够的内存以适合串联结果。
您的代码有几个问题:
char*
,而不是char
malloc
动态分配内存; 您不能返回本地分配的数组。 1
const char*
这是解决方法:
char *cat(const char *a, const char *b) {
int i=0,cont=0,h=strlen(a)+strlen(b);
char *c = malloc(h+1);
// your implementation goes here
c[cont] = '\0';
return c;
}
char * strcat(char *dest, const char *src)
{
int i;
int j;
for (i = 0; dest[i] != '\0'; i++);
for (j = 0; src[j] != '\0'; j++) {
dest[i+j] = src[j];
}
dest[i+j] = '\0';
return dest;
}
c
是局部变量。 它仅存在于cat函数中。 您应该使用malloc
。
代替
char c[h];
采用
char *c = malloc(h);
另外,您应该在末尾添加空字节。 请记住,C中的字符串为空结尾。
h = strlen(a) + strlen(b) + 1;
最后:
c[h - 1] = '\\0';
cat的签名应为char *cat(char *a, char *b);
您正在将POINTER返回到字符串,而不是实际的字符串本身。 您需要将返回类型更改为类似于“ char *”(或类似值)的内容。 您还需要确保以null终止该字符串(附加一个'\\ 0')以使其正确打印。
根据我自己的建议(并发现另一个错误,这是第二个for循环未遍历正确索引的事实),您最终得到以下程序:
#include <stdio.h>
char *cat(char *a, char *b) {
int i = 0, j = 0;
int cont = 0;
int h = strlen(a) + strlen(b) + 1;
char *result = (char*)malloc(h * sizeof(char));
for(i = 0; i < strlen(a); i++) {
result[i] = a[i];
}
for(j = i; j < strlen(b)+ strlen(a); j++) {
result[j] = b[cont++];
}
// append null character
result[h - 1] = '\0';
return result;
}
int main() {
const char *firstString = "Test First String. ";
const char *secondString = "Another String Here.";
char *combined = cat(firstString, secondString);
printf("%s", combined);
free(combined);
return 0;
}
您会得到一个错误
期望常数表达式
对于代码行char c[h];
。 相反,您应该使用malloc
在运行时分配任何动态内存,例如:
char* c ;
c = malloc( h + 1 ) ; // +1 for the terminating null char
// do stuff
free( c ) ;
您更正后的代码::
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include <stdlib.h>
char* cat(char *a, char *b) {
int i=0,cont=0,h=strlen(a)+strlen(b), j;
char *c;
c = malloc( h+1 ) ;
for(i;i<strlen(a);++i) {
c[i] = *(a+i);
}
j = 0 ;
for(j;j<strlen(b);++j) {
c[i] = *(b+cont);
i++ ;
cont++;
}
c[i] = 0 ;
return c;
}
int main() {
char A[1000],B[1000];
char * a ;
printf("Inserisci la stringa 1: \n");
gets(A);
printf("Inserisci la stringa 2: \n");
gets(B);
a = cat(A,B) ;
printf("\nConcatenazione: %s", a);
free(a) ;
getch();
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.