C 我怎样才能复制“a”中的字符;浇铸;一串

C 我怎样才能复制“a”中的字符;浇铸;一串,c,string,casting,char,malloc,C,String,Casting,Char,Malloc,我是C语言的新手,我没有走上正确的道路。我目前正专注于我的C编程考试,但我目前无法处理内存分配问题。作为一个新手,我不知道我是否能解决这个问题,因为我对此一无所知。我特意对姓名和工作的大小设置了一个限制(只有姓名和姓氏之间有一个空格)。另外,请看一下分配的内存大小,我不完全确定它是否正确。我给你举个例子 1. NAME: Elton Rana 2. JOB: Programmer 编辑修复主要问题: 1. NAME: Elton Rana 2. JOB: Programmer 铸造是

我是C语言的新手,我没有走上正确的道路。我目前正专注于我的C编程考试,但我目前无法处理内存分配问题。作为一个新手,我不知道我是否能解决这个问题,因为我对此一无所知。我特意对姓名和工作的大小设置了一个限制(只有姓名和姓氏之间有一个空格)。另外,请看一下分配的内存大小,我不完全确定它是否正确。我给你举个例子

 1. NAME: Elton Rana
 2. JOB: Programmer
编辑修复主要问题:

 1. NAME: Elton Rana
 2. JOB: Programmer
铸造是没有必要的。例如,字符串[i]=字符

 1. NAME: Elton Rana
 2. JOB: Programmer
输入:

 1. NAME: Elton Rana
 2. JOB: Programmer
输出:

 1. NAME: Elton Rana
 2. JOB: Programmer
Elton (Programmer) Rana
#包括
#包括
#包括
int main(){
字符名[20],作业[20];
scanf(“%[^\n]s”,名称);
scanf(“%s”,作业);
字符空间=“”;
字符1='(';
字符2=')';
char*fullname=(char*)malloc((4+strlen(name)+strlen(job))*sizeof(char));
int savepos;

对于(inti=0;i,您不需要任何这些类型转换来char

 1. NAME: Elton Rana
 2. JOB: Programmer
此外,对于普通的旧值(非指针)类型,确实无法在左侧强制转换表达式。这是一个编译器错误

 1. NAME: Elton Rana
 2. JOB: Programmer
与此相反:

 1. NAME: Elton Rana
 2. JOB: Programmer
(char) fullname[i]= space; //places a space
这就足够了:

 1. NAME: Elton Rana
 2. JOB: Programmer
fullname[i]= space; //places a space
同样地:

 1. NAME: Elton Rana
 2. JOB: Programmer
 (char) fullname[i]= (char) name[h];
可能就是这样:

 1. NAME: Elton Rana
 2. JOB: Programmer
fullname[i]= name[h];
伙计

 1. NAME: Elton Rana
 2. JOB: Programmer
在我看来,我建议您使用
strtok()
参考
sprintf()

 1. NAME: Elton Rana
 2. JOB: Programmer
如果你需要更具体的帮助,请给我留言:D

 1. NAME: Elton Rana
 2. JOB: Programmer

当您使用
sprintf()
时,您可以在需要的地方打印一些内容

 1. NAME: Elton Rana
 2. JOB: Programmer
例如
printf()
sprintf(stdout,“Hello world\n”)

 1. NAME: Elton Rana
 2. JOB: Programmer
在本例中,我们将
stdout
称为流

 1. NAME: Elton Rana
 2. JOB: Programmer
(不用担心,随着时间的推移,您将自己理解

 1. NAME: Elton Rana
 2. JOB: Programmer
因此,您可以轻松地使用
spirntf()填充字符数组。

 1. NAME: Elton Rana
 2. JOB: Programmer
sprintf(全名,“%s(%s)%s”、姓氏、职务、姓氏)

 1. NAME: Elton Rana
 2. JOB: Programmer
就像“嘿,
printf(“%s(%s)%s\n)”,lastName,job,firstName)
fullname

 1. NAME: Elton Rana
 2. JOB: Programmer
如何将
名称
转换为
姓氏

 1. NAME: Elton Rana
 2. JOB: Programmer
在这种情况下,我们可以使用
strtok()

 1. NAME: Elton Rana
 2. JOB: Programmer
char *lastName = strtok(name, " ");
char *firstName = strtok(NULL, " ");
最后,事情会是这样的

 1. NAME: Elton Rana
 2. JOB: Programmer
#include <stdio.h>
#include <string.h>

int main()
{

    char name[20];
    char job[20];

    scanf("%[^\n]s", name);
    scanf("%s", job);

    char allocatedBuffer[100];  

    char *lastName = strtok(name, " ");
    char *firstName = strtok(NULL, " ");

    sprintf(allocatedBuffer, "%s (%s)%s", lastName, job, firstName);    

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

    return 0;
}

#包括
#包括
int main()
{
字符名[20];
charjob[20];
scanf(“%[^\n]s”,名称);
scanf(“%s”,作业);
char allocatedBuffer[100];
char*lastName=strtok(名称“”);
char*firstName=strtok(NULL,“”);
sprintf(allocatedBuffer,“%s(%s)%s”、lastName、job、firstName);
printf(“%s\n”,allocatedBuffer);
返回0;
}

非常感谢也许我已经筋疲力尽了,除非你学会检查每个输入和每个分配的返回,否则你永远无法成为一名程序员。盲目地前进,不知道你是否收到了有效的输入或是否有有效的内存块来处理未定义的行为……哇,这真是太棒了很好,我给Strtok还有另一个意思。它就像C++中的STR.SUBL,但是它和“令牌”一起使用,是字符串。对吗?哈布拉斯谢谢,伙计。是的,你说得不错!“正如你上面提到的,”“是一个标记!”