我需要帮助我的C程序,这是我学校的作业。我认为离正确很近了,但我仍然无法使结果正确地打印出来。该程序由4个.c函数文件组成。
出于某种原因,我无法正确输出程序,但我无法弄清楚原因。也许这里的某个人能发现我做错了什么。任何技巧都将不胜感激。我是编程新手。我们被给予函数和参数,并且我们必须想出内部细节。
这些函数应该使用指针和malloc进行动态分配来创建和访问字符串数组。
1:createStringArray.c 动态分配一个指向字符串的指针数组
#include <stdlib.h>
char** createStringArray(int number){
return malloc((sizeof(char*))*number);
}
2: setStringArray.c将字符串存储在数组中,传递到函数中的字符串必须已经分配了内存,并且必须复制到空间中。对于参数:array是第一部分中分配的数组,index是要存储字符串的位置,string是要传入的字符串。
#include <stdlib.h>
void setStringArray(char** array, int index, char* string){
array[index] = &*string;
}
3: getStringArray.c 应该根据索引参数从数组中返回一个字符串
char* getStringArray(char** array, int index){
return (char*)array[index];
}
4: freeStringArray.c 应该用于释放数组。
#include <stdlib.h>
void freeStringArray(char** array, int number){
free(array);
}
我们也有一个测试主线可供使用。我已经在arrayDefns.h中声明了这些函数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "arrayDefns.h"
#define MAXSIZE 100
int main ( )
{
char **arrayPtrs;
char *string;
char inputStr[MAXSIZE+1];
int number;
int i;
number = 4;
printf ( "arrayPtrs = createStringArray ( %d )\n\n", number );
arrayPtrs = createStringArray ( number );
for ( i=0; i<number; i++ ) {
printf ( "Enter a string: " );
fgets ( inputStr, MAXSIZE, stdin );
inputStr[strlen(inputStr)-1] = '\0';
string = malloc ( sizeof(char) * (strlen(inputStr)+1) );
strncpy ( string, inputStr, strlen(inputStr)+1 );
printf ( "setStringArray ( arrayPtrs, %d, %s )\n", i, string );
setStringArray ( arrayPtrs, i, string );
free ( string );
}
printf ( "\n" );
for ( i=0; i<number; i++ ) {
string = getStringArray ( arrayPtrs, i );
printf ( "%s = getStringArray ( arrayPtrs, %d )\n", string, i );
}
printf ( "\nfreeStringArray ( arrayPtrs, %d )\n", number );
freeStringArray ( arrayPtrs, number );
return(0);
}
目前我得到的输出是正确的,一直到最后一个部分,应该打印“%s = getStringArray”,但 %s 部分并没有正确地打印出来。
free( string );
看看是否能使它运行得更好一些... - Joël Hechtfree
的代码在测试代码中,他们不应该修改它。 - Roland Illigchar*
不是一个字符串。它可能只是指向字符串的第一个元素。因此,您需要单独定义(暗示分配)实际的“字符串”。 - alk