在C语言中将字符指针分配给字符数组

3

我开始学习C语言,但已经遇到了一些问题。 我想解析一个文件并将每行的结果存储在一个结构体中。 我的结构体如下:

struct record {
    char x[100];
}

然后,每当我使用strtok来解析某个file.txt文件中的一行时,

struct record R;
...
char *token;
token = strtok(line, "\t");

token 返回一个指向字符串的指针,每当我打印它时,都是正确的字符串。我想将 token 分配给 x,例如 R.x = token,但是我会收到错误消息“char x [100] 无法分配”。是否可以将此指针 token 转换为实际的 char 数组,或者有什么最好的方法将结果存储到结构中?


你不能像那样直接赋值数组。使用 memcpy() 函数将数据填充到数组中。 - Bregalad
3个回答

5
错误已经提示了。数组无法分配。您需要一个个复制每个字符,然后在末尾添加一个NUL终止符。

幸运的是,有一个函数可以为您执行此操作。该函数的名称为strcpy,并且可以在string.h头文件中找到。

要解决您的问题,请使用以下代码:

strcpy(R.x,token);

替代

R.x = token;

1

在确保字符串适合数组后,使用strcpy

#define LEN(array) (sizeof (array) / sizeof (array)[0])

if (strlen(token) < LEN(R.x)) {
   strcpy(R.x, token);
} else {
   fprintf(stderr, "error: input string \"%s\" is longer than maximum %d\n", token, LEN(R.x) - 1);
}

1

strcpy函数遇到NULL时会停止,而memcpy不会。所以如果你的数组中间有0x00(例如\0),你应该使用memcpy而不是strcpy


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接