main()
{
char** names = NULL;
int numStudents = 0;
AddStudent(&names,"Bob", NumStudents);
printf("%s", names[0]);
}
将学生添加到数组的函数
void AddStudent(char*** names, char* name, int numStudents)
{
numStudents++;
*names = (char**)realloc(*names, sizeof(char*)*numStudents);
if (*names == NULL) {
printf("malloc failed\n");
exit(1);
}
char** arr = *names;
AddStringToArray(arr, name, numStudents);
}
void AddStringToArray(char** arr, char* str, int index)
{
arr[index-1] = malloc(strlen(str));
if (arr[index-1] == NULL) {
printf("malloc failed\n");
exit(1);
}
strcpy(arr[index-1], str);
}
我尝试了这个并得到了这个评论-
Error reading characters of string
当我尝试在主函数中打印时
最佳答案
这是 AddStringToArray 的简单起点:
- 传递一个字符串数组,即一个
char**
。 - 传递添加新
char*
位置的索引。 - 确保您传递的索引位于数组范围内,以确保分配足够的空间。
调用代码:
char* names[3];
size_t namesCapacity = 3;
AddStringToArray(names, "Bob", 0, namesCapacity);
AddStringToArray(names, "Sue", 1, namesCapacity);
AddStringToArray(names, "Pete", 2, namesCapacity);
AddStringToArray 定义:
void AddStringToArray(char** arr, char* str, size_t index, size_t arrCapacity) {
if (index >= namesCapacity)
printf("Error, out of bounds\n");
exit(1);
}
arr[index] = malloc(strlen(str));
if (arr[index] == NULL) {
printf("malloc failed\n");
exit(1);
}
strcpy(arr[index], str);
}
<小时/>
回复评论:
如果您无法跟踪数组的大小,我们可以创建另一个函数来在必要时重新分配。
void AddOrUpdate(char*** arrPtr, char* str, size_t index)
{
*arrPtr = realloc(*arrPtr, index+1);
if(*arrPtr == NULL) {
printf("malloc failed\n");
exit(1);
}
char** arr = *arrPtr;
AddStringToArray(arr, str, index, index+1);
}
然后这样调用它:
char** names = NULL;
AddOrUpdate(&names, "Bob", 0);
AddOrUpdate(&names, "Sue", 1);
AddOrUpdate(&names, "Pete", 2);
注意:确保始终添加到数组的末尾。如果您添加到中间,此实现将重新分配到该点,并且您将丢失该索引之后的所有内容。
此外,如果您只想将字符串添加到数组末尾,则必须在数组范围内使用终止 NULL。然后,当您想要添加某些内容时,从数组的开头对其进行迭代,并将其作为索引传递给 AddOrUpdate
。
关于c - C 中传递指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34253507/