gpt4 book ai didi

Char *(指针)函数

转载 作者:太空宇宙 更新时间:2023-11-04 00:12:29 25 4
gpt4 key购买 nike

我需要在函数中传入一个 char * 并将其设置为一个 cstring 值。我可以在函数中将其正确设置为字符串,但它似乎无法在首先调用 char * 函数的函数中正确打印出来。

int l2_read(char *chunk,int length)
{
chunk = malloc( sizeof(char) * length);

int i;
for(i = 0; i < length; i++){
char c;
if(read(&c) < 0) return (-1); // this gets a single character
chunk[i] = c;
}

printf("%s",chunk); // this prints fine
return 1;
}


// main
char *string;
int value = l2_read(string,16);
printf("%s",chunk); // prints wrong

最佳答案

在 C 中,一切都是按值传递的。要记住的一般规则是,您不能更改传递给函数的参数值。如果你想传递一些需要改变的东西,你需要传递一个指向它的指针。

因此,在您的函数中,您想要更改 chunkchunkchar *。为了能够更改 char * 的值,您需要传递一个指向它的指针,即 char **

int l2_read(char **chunkp, int length)
{
int i;
*chunkp = malloc(length * sizeof **chunkp);
if (*chunkp == NULL) {
return -2;
}
for(i = 0; i < length; i++) {
char c;
if (read(&c) < 0) return -1;
(*chunkp)[i] = c;
}
printf("%s", *chunkp);
return 1;
}

然后在 main() 中:

 char *string;
int value = l2_read(&string, 16);
if (value == 1) {
printf("%s", string); /* corrected typo */
free(string); /* caller has to call free() */
} else if (value == -2) {
/* malloc failed, handle error */
} else {
/* read failed */
free(string);
}

C 中的按值传递是 strtol()strtod() 等需要 char **endptr 的原因> 参数而不是 char *endptr——他们希望能够将 char * 值设置为第一个无效字符的地址,这是他们影响char *在调用者中是接收一个指向它的指针,即接收一个char *。同样,在您的函数中,您希望能够更改 char * 值,这意味着您需要一个指向 char * 的指针。

希望对您有所帮助。

关于Char *(指针)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2227077/

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