在C中为char数组赋一个char指针

时间:2015-04-11 07:04:35

标签: c arrays pointers strtok

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

struct record {
    char x[100];
}

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

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

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

3 个答案:

答案 0 :(得分:4)

错误说明了一切。 阵列不可分配。您需要逐个复制每个字符,然后在末尾添加NUL终止符。

幸运的是,有一个功能可以帮到你。该函数的名称为strcpy,可在string.h标题中找到。

要解决您的问题,请使用

strcpy(R.x,token);

而不是

R.x = token;

答案 1 :(得分:0)

确保字符串适合数组后使用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);
}

答案 2 :(得分:0)

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