我的主要功能中有一个字符串。
我需要将它发送到其他函数,并将malloc设置为与原始字符大小相同的新字符串。
我尝试这样的事情:
#define SIZE_STRING 100
typedef char string[SIZE_STRING];
char *testCode(string str)
{
char *new_str;
int limit = strlen(str);
int new_limit;
new_str = (char*)calloc(limit, sizeof(char));
new_limit = strlen(new_str);
printf("%d", new_limit);
return new_str;
}
void main()
{
char str[SIZE_STRING] = { "BLA BLA BLA" };
char *new_str;
new_str=testCode(str);
}
new_limit
的大小为0。
我该怎么办?
答案 0 :(得分:1)
变化:
new_str = (char*)calloc(limit, sizeof(char));
到
new_str = malloc(limit + 1);
strcpy(new_str, str);
你从未将旧字符串复制到刚刚创建的缓冲区中,所以当你对其进行strlen
时,你当然会得到零。
答案 1 :(得分:0)
对于c中与原始字符串大小相同的malloc()字符串,必须为函数“testCode”提供一个额外的信息项。即,原始字符串的大小。
#define SIZE_STRING 100
typedef char string[SIZE_STRING];
char *testCode(string str, size_t strSize)
在'testCode'的参数中添加'strSize'(上面)以提供'str'的实际大小。
{
char *new_str;
// int limit = strlen(str);
// int new_limit;
new_str = (char*)calloc(strSize, sizeof(char));
为'strSize'交换'limit'以分配正确的大小。
new_limit = strSize;
为'strSize'交换'strlen(new_str)'。前一个术语'strlen(new_str)'将始终为零,因为calloc()'将新内存归零'功能。
printf("%d", new_limit);
return new_str;
}
void main()
{
char str[SIZE_STRING] = { "BLA BLA BLA" };
char *new_str;
new_str=testCode(str, sizeof(str));
}
最后的想法......
问题是如何“在c中使用与原始字符串相同大小的malloc字符串”。请记住,字符数组的“大小”与字符数组的“长度”不同。虽然数组的“大小”定义为构成整个数组的字节数(或可能是元素),但C字符串的“长度”是在数组中找到的字符数,直到终止'\ 0'字符。
因此,如果问题实际上是如何“在c中使用相同长度原始字符串的malloc字符串”,则上述答案仍然适用,但该行除外:
new_str=testCode(str, sizeof(str));
必须更改为:
new_str=testCode(str, strlen(str)+1);
答案 2 :(得分:0)
你的意思是你被赋予了重新实现strdup()libc函数的任务吗?