gpt4 book ai didi

c - 一个返回指向 2 个字符串数组的指针的 c 程序

转载 作者:太空宇宙 更新时间:2023-11-04 07:11:05 24 4
gpt4 key购买 nike

我目前正在尝试用 c 编写一个程序,它将返回一个指向 2 个字符串的数组的指针。第一个是字符串 s 中奇数位置的字符,第二个是偶数位置的字符。我没有使用 C 语言的经验,所以我需要一些有关此程序的帮助。我一直在尝试使用我从 python 和 java 中了解到的知识进行编码,但它似乎并没有遵循与指针相同的原则。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char **parity_strings(const char *s){

char dest[malloc((char)sizeof(s)/2 + 1)][malloc((char)sizeof(s)/2 + 1)]; //trying to allocate memory to an array of size 2 which will hold 2 strings.

int i;
for(i = 0; i < sizeof(s); i+= 2){ //iterating through odd strings
s[0] += dest[i];
}
for(i= 2; i< sizeof(s); i += 2){ //iterating through even strings (I suppose i could have just appended using 1 for loop but oh well
s[1] += dest[i];
}

return dest;


}

int main(int argc, char **argv) {
char **r = parity_strings(argv[1]);
printf("%s %s %s\n", r[0], r[1], argv[1]);
return 0;
}

内存分配也很麻烦...我不知道它是否按照我的预期进行。我正在尝试将字符串的大小(以字节为单位 + 1 字节)分配到数组 Dest 的每个索引中。

关于如何解决这个问题的任何想法?谢谢。

最佳答案

这一行不会有任何好处:

char dest[malloc((char)sizeof(s)/2 + 1)][malloc((char)sizeof(s)/2 + 1)];

malloc 返回指向新分配内存的指针。在您上面的行中,dest[][] 中的方括号需要无符号整数。指针可以转换为整数,但这根本不是你想要的。它可能会编译,但可能不会运行,而且肯定不会执行您想要的操作。

此外,sizeof(s) 返回指向s 的指针的大小,而不是字符串的长度。 C 中的字符串实际上只是 char 的以 null 结尾的数组,并且数组通过指针而不是它们的全部内容传递给函数。要获取字符串的长度,请改用 strlen(s)

你可以这样做:

char *destodd = malloc((strlen(s)/2 + 2));
char *desteven = malloc((strlen(s)/2 + 2));
char **dest = malloc(sizeof(char *) * 2);
dest[0] = desteven;
dest[1] = destodd;

我将上面的 +1 更改为 +2。长度为 3 的字符串在 destodd 中需要 3 个字符:一个用于字符 1,一个用于字符 3,一个用于 NUL 终止符。

malloc a multi-dimensional array 很棘手在 C 中。另一方面,一维数组很容易。只需将 destodddesteven 视为数组,即使它们实际上是指针:

for (i = 0; i < strlen(s); i += 2){
desteven[i] = 'a'; // Fix this
destodd[i] = 'b';
}

for 循环中的代码看起来无法正常工作。看起来您可能一直在尝试使用 += 来连接字符串,但它只会添加数字。我无法快速弄清楚您应该在 for 循环中设置什么,所以 'a''b' 只是占位符。

关于c - 一个返回指向 2 个字符串数组的指针的 c 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28377912/

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