将字符串存储在 C 的 char 数组中——我做错了什么?
Store string in char array in C -- What am I doing incorrectly?
我正在从 getline() 中检索一个字符串,如下所示:
length = getline(&line, &linecap, stdin);
此字符串包含空格。
然后我将这一行插入数组中:
char *history[10];
history[0]=line;
然后我从数组中打印这个条目的内容:
printf("\nHISTORY[%d] = %s", 0, (history[0]));
问题是只有第一个词被打印到屏幕上。似乎只有第一个单词实际存储在数组中。
如果例如行 = "This is such a great line"。然后我将这一行插入到历史数组中,但只有 "This" 这个词从我的 printf.
中打印出来
我做错了什么?
你不能写history[0] = line
。您需要使用 strcpy
:
strcpy(history[0], line)
第一个参数是目的地,第二个参数是源。但是,您没有为 history
中的任何元素分配 space。它们只是不指向有效区域的指针。你可以通过
解决这个问题
for (i = 0; i < 10; ++i)
history[i] = malloc(strlen(line) + 1);
现在您可以复制到history[i]
。
完成后,必须释放内存
for (i = 0; i < 10; ++i)
free(history[i]);
但是 strcpy
的问题是,如果目标中没有足够的 space,就会发生缓冲区溢出。要解决此问题,请重写 strcpy
以接受长度。
void mystrcpy(char *dest, char *src, size_t n)
{
size_t i;
for (i = 0; i < n && *dest++ = *src++; ++i)
;
dest[i] = 0;
}
以上函数只复制src
到dest
的前n
个字符。这是一个进步。
我正在从 getline() 中检索一个字符串,如下所示:
length = getline(&line, &linecap, stdin);
此字符串包含空格。
然后我将这一行插入数组中:
char *history[10];
history[0]=line;
然后我从数组中打印这个条目的内容:
printf("\nHISTORY[%d] = %s", 0, (history[0]));
问题是只有第一个词被打印到屏幕上。似乎只有第一个单词实际存储在数组中。
如果例如行 = "This is such a great line"。然后我将这一行插入到历史数组中,但只有 "This" 这个词从我的 printf.
中打印出来我做错了什么?
你不能写history[0] = line
。您需要使用 strcpy
:
strcpy(history[0], line)
第一个参数是目的地,第二个参数是源。但是,您没有为 history
中的任何元素分配 space。它们只是不指向有效区域的指针。你可以通过
for (i = 0; i < 10; ++i)
history[i] = malloc(strlen(line) + 1);
现在您可以复制到history[i]
。
完成后,必须释放内存
for (i = 0; i < 10; ++i)
free(history[i]);
但是 strcpy
的问题是,如果目标中没有足够的 space,就会发生缓冲区溢出。要解决此问题,请重写 strcpy
以接受长度。
void mystrcpy(char *dest, char *src, size_t n)
{
size_t i;
for (i = 0; i < n && *dest++ = *src++; ++i)
;
dest[i] = 0;
}
以上函数只复制src
到dest
的前n
个字符。这是一个进步。