【问题标题】:How to copy the returned token by strtokstrtok如何复制返回的token
【发布时间】:2016-04-17 10:42:14
【问题描述】:

所以基本上我不知道如何很好地使用这个命令,我在论坛中搜索并且可以理解如何打印字符串和使用指针,但我想分割字符串并将所有标记保存在不同的变量中.

我正在尝试做这样的事情

char s[20],*pt,name[10];
pt=strtok(s," ");

现在我想保存名称字符串上的第一个标记,但我在终端上收到错误,唯一有效的方法(仅传递指针)只给我 1 个字母。

  • name=pt; 不起作用。
  • *(name)=*pt 有效,但只收到一封信。

完整代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
FILE *f=fopen("tarefas.txt","r");
char s[50];

typedef struct{
char nome[20];
int trab;
int acab;
} tarefa;


int i=0,*dias;
tarefa *v;
char *pt;

v=(tarefa *) malloc(sizeof(tarefa));
dias=(int *) malloc(sizeof(int));


while(fgets(s,50,f)){
pt= strtok(s," ");

v[i].nome=s; //doesnt work

int t=strlen(v[i].nome);
v[i].nome[t]='\0';

printf("%s\n",s);

}

【问题讨论】:

标签: c strtok strcpy


【解决方案1】:

name=pt;没用。

和

v[i].nome=s; //doesnt work

无论如何,它们不应该工作。数组名称不是可修改的 lvaues,因此在 C 中是不可分配的。

要复制字符串,您应该使用strcpy()。

类似

 strcpy(v[i].nome,s);

应该做的很好。

也就是说,你应该检查一下

【讨论】:

  • @JoãoGomes 为什么不呢?你试过了吗?
  • 我只是愚蠢的sry,第一年不是izi:/
  • 源是pt,目的是v[i].nome,所以strncpy(v[i].nome, pt, 19); v[i].nome[19] = '\0';。但是在这样做之前请检查pt 不是NULL!
猜你喜欢
  • 2021-12-13
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多