gpt4 book ai didi

c - 通过指针的字符串(数组)容量

转载 作者:行者123 更新时间:2023-11-30 15:55:38 26 4
gpt4 key购买 nike

我正在尝试创建一个子例程,将一个字符串插入另一个字符串。我想检查主机字符串是否有足够的容量来容纳所有字符,如果没有,则返回错误整数。这需要使用类似 sizeof 的东西,但可以使用指针调用。我的代码如下,我将非常乐意提供任何帮助。

#include<stdio.h>
#include<conio.h>
//#include "string.h"

int string_into_string(char* host_string, char* guest_string, int insertion_point);

int main(void) {
char string_one[21] = "Hello mother"; //12 characters
char string_two[21] = "dearest "; //8 characters
int c;

c = string_into_string(string_one, string_two, 6);
printf("Sub-routine string_into_string returned %d and creates the string: %s\n", c, string_one);
getch();
return 0;
}

int string_into_string(char* host_string, char* guest_string, int insertion_point) {
int i, starting_length_of_host_string;
//check host_string is long enough
if(strlen(host_string) + strlen(guest_string) >= sizeof(host_string) + 1) {
//host_string is too short
sprintf(host_string, "String too short(%d)!", sizeof(host_string));
return -1;
}

starting_length_of_host_string = strlen(host_string);
for(i = starting_length_of_host_string; i >= insertion_point; i--) { //make room
host_string[i + strlen(guest_string)] = host_string[i];
}
//i++;
//host_string[i] = '\0';
for(i = 1; i <= strlen(guest_string); i++) { //insert
host_string[i + insertion_point - 1] = guest_string[i - 1];
}
i = strlen(guest_string) + starting_length_of_host_string;
host_string[i] = '\0';

return strlen(host_string);
}

最佳答案

C 不允许将数组作为函数参数传递,因此所有 T[N] 类型的数组都会衰减为 T* 类型的指针。您必须手动传递尺寸信息。但是,您可以在调用站点使用 sizeof 来确定数组的大小:

int string_into_string(char * dst, size_t dstlen, char const * src, size_t srclen, size_t offset, size_t len);

char string_one[21] = "Hello mother";
char string_two[21] = "dearest ";

string_into_string(string_one, sizeof string_one, // gives 21
string_two, strlen(string_two), // gives 8
6, strlen(string_two));

如果您使用 malloc 创建动态数组,则无论如何都必须将大小信息单独存储在某处,因此这个习惯用法仍然适用。

(请注意 sizeof(T[N]) == N * sizeof(T),并且我已经使用了 sizeof(char) == 1 > 简化代码。)

关于c - 通过指针的字符串(数组)容量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11930810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com