我无法为数组动态分配内存。 该程序简单地应该交换第一行与第二行的交换,第三行与第四行交换。我得到了奇怪的结果,如:
输入字符串:hello
输入字符串:你好吗
输入字符串:我很感谢
输入字符串:bye
输入字符串:bai
输入字符串:xx
=========================
你好吗
!我很感谢
您好
!你好吗
再见
!白
我很感谢
!再见
白
!XX
int count = 0;
char *lines[MAX_LINES];
char *tmp[50];
printf("Enter string: ");
fgets(tmp, 50, stdin);
lines[count] = (char *) malloc((strlen(tmp)+1) * sizeof(char));
strcpy(lines[count], tmp);
while(strcmp("xx\n", lines[count])){
count++;
printf("Enter string: ");
fgets(tmp, 50, stdin);
lines[count] = (char *) malloc((strlen(tmp)+1)* sizeof(char));
strcpy(lines[count], tmp);
}
void exchange(char * records[])
{
char * temp;
temp = records[0];
records[0] = records[1];
records[1] = temp;
temp = records[2];
records[2] = records[3];
records[3] = temp;
}
void printArray(char * inputs[], int row, int col)
{
int i, j;
for(i = 0; i < row; i++){
for(j = 0; j < col; j++){
printf("%c", inputs[i][j]);
}
}
}
答案 0 :(得分:0)
这不好:
char *tmp[50];
你打算这样做:
char tmp[50];
奇怪的是,它会有点工作,但是你的编译器应该在各处发出警告。
我认为你的主要问题是你的printArray
函数,它不检查字符串中的NULL终止符。所以它会在大部分结束时运行。
不要逐个字符地打印,请执行以下操作:
void printArray(char * inputs[], int length)
{
int i;
for(i = 0; i < length; i++){
printf("%s", inputs[i]);
}
}
以下是使用malloc
的提示。不要转换结果,如果您为char
值保留空间,请不要使用sizeof(char)
- 它始终为1.
lines[count] = malloc( strlen(tmp) + 1 );