我在理解代码出错的地方时遇到了一些麻烦。我想存储多个字符串数组,然后显示它们;由于一些未知的原因,在我输入不同数量的行(比如说5)之后,它只会显示最后一行5次。有什么想法吗?
谢谢
#include <stdio.h>
#include <string.h>
int readLine(char line[], int max);
void printLines(char *lines[], int size);
int main(){
char *lines[100];
char line[100];
int i = 0;
int len = 0;
char *p;
while( (len = readline(line,100)) > 0){
if((p = malloc(len * sizeof(char))) != NULL){
p = line;
lines[i++] = p;
}
}
lines[i] = '\0';
printLines(lines, i);
return 0;
}
int readline(char line[], int max){
if(fgets(line,max,stdin) == NULL)
return 0;
printf("%d \n", strlen(line));
return strlen(line);
}
void printLines(char *lines[], int size){
int i;
for(i = 0; i < size; i++)
printf("%s\n", lines[i]);
}
答案 0 :(得分:1)
这是你的问题:
if((p = malloc(len * sizeof(char))) != NULL){
p = line;
lines[i++] = p;
}
p
是一个指向先分配存储的指针,但是它的值会被line
的值覆盖。您想要的是将当前存储在line
指向的位置的内容复制到p
所指向的位置。其功能是strcpy()
。
注意:
sizeof (char)
完全按照sizeof的定义。答案 1 :(得分:1)
if((p = malloc(len * sizeof(char))) != NULL){
p = line;
lines[i++] = p;
您为字符串分配内存,并将malloc()
返回的指针存储在p
中。然后在line
中存储指向p
的指针,有效地丢弃指向刚分配的内存的指针。您需要使用strcpy()
或类似内容复制字符串。
strcpy (p, line);