好的,我知道这可能会被标记为重复,但我到处搜索但无法弄清楚,所以请多多包涵。
首先让我说这是一个家庭作业,所以我不能更改函数参数类型。
此外,我不允许使用任何库(嗯,在进行更改的函数内部)。
第1部分
首先,我将如何做到这一点:
void changeMe(char* s, int size) {
//Change s to be "Hello, World!"
}
int main(void) {
char* c;
changeMe(c, 13);
printf("%s", c); //Print out "Hello, World!"
}
(作业不需要“Hello,World!”位,但我不需要逻辑帮助,只需更改传递的变量。)
我已经看遍了,大多数答案最终都像这里的这个,它说我需要参数是char** s
,或者char*& s
为了改变它。
我唯一的选择是假设在传递之前已经为 s 分配了足够的内存吗?例如:
void changeMe(char* s, int size) {
int i;
for (i = 0; i < size - 1; i++) s[i] = 'a';
s[size - 1] = '\0';
}
int main(void) {
char* c = (char*) malloc(10 * sizeof(char)) ;
changeMe(c, 10);
printf("%s", c); //Prints out "aaaaaaaaa"
}
这工作正常,但从malloc(...)
声明中删除c
不会。
放入函数malloc(...)
内部可以在本地工作,但只会在范围内changeMe(...)
持续。changeMe
有没有办法改变我的char* c
而不假设它在传递给函数之前分配了足够的内存?
第2部分
这几乎与上面的内容完全属于同一类别,因此我将在这里少做解释。
功能:
void split(char* s, char** sub, int max, char sep) {
//Split string s by sep char, store all substrings found into sub
//sub will have at most max substrings in it.
}
我不是在寻求帮助编写查找和拆分的char* s
逻辑char c
。我能做到。我的问题主要和上面一样。我如何分配内存char** sub
以便它可以容纳其中的所有子字符串(当然,更改传递的变量)。
例如:
void split(char* s, char** sub, int max, char sep) {
//-->(Needed) Make sub able to hold max strings.
//(Not Needed) Logic for splitting s up by sep, creating a substring.
//-->(Needed) Making sub[i] have memory to hold current substring.
}
int main(void) {
char* s = "Some String To Use";
char** subs;
split(s, subs, 10, ' ');
//subs should look like this:
//{"Some", "String", "To", "Use"}
}
我不需要帮助来完成实际工作,我只是对如何传递subs
并split(...)
让它分配适当的内存和更改感到困惑subs
。
鳍
如果您已经完成了我的问题,感谢您的阅读。
而且,在所有“你尝试过 google”评论进来之前,是的。到目前为止,这里有一些我看过的内容:
(编辑:谢谢,hacks,为我添加超链接。)
- 网通
- 维基书
- 字符指针函数
- 表示将参数更改为 char** 或 char*&。我没有那种奢侈。
- 传递未知大小的引用多维数组
同样,如果我是为自己编写这个,我会更改参数(char** s
而不是char* s
例如),并使用漂亮、有用的函数,如strcpy
等,但在这种情况下我不能这样做。任何帮助/输入将不胜感激,在此先感谢大家!