我是C语言的新手,走的不对。我目前正在专注于C编程考试,但是目前我与内存分配相处得并不融洽。作为新手,我不知道是否可以解决此问题,因为我对此一无所知。我特意设置了名称大小(名称和姓氏之间必须有一个空格)和作业大小的限制。另外,请看一下分配的内存大小,我不确定这是否正确。我给你举个例子。
编辑已解决的主要问题:
不需要广播。例如。字符串[i] =字符。
输入:
1. NAME: Elton Rana
2. JOB: Programmer
输出:
Elton (Programmer) Rana
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
char name[20], job[20];
scanf("%[^\n]s",name);
scanf("%s",job);
char space=' ';
char character1='(';
char character2=')';
char* fullname=(char*) malloc((4+strlen(name)+strlen(job)) * sizeof(char));
int savepos;
for(int i=0; i<20; i++){
if((char)name[i]==space){ //position of the space between name and last name
savepos=i;
break;
}
}
int k=0,h=0;
for(int i=0; i<100; i++){
if(i==savepos){
fullname[i]= space; //places a space
i++;
fullname[i]= character1; //places a (
}else if(i==(h+strlen(job)+2)){
fullname[i]= character2; //places a )
i++;
fullname[i]= space; //places a space
}else if(i<(strlen(name)+strlen(job)+2) && i>savepos+1){
fullname[i]= job[k]; //places the job's name between ()
k++;
}else{
fullname[i]=name[h]; //places the name
h++;
if(name[h]=='\0'){
fullname[i]='\0';
break;
}
}
}
printf("%s\n",fullname);
free(fullname);
}
答案 0 :(得分:0)
您不需要任何强制转换为char。
此外,对于普通的旧值(非指针)类型,您实际上仍然无法在左侧强制转换表达式。那是编译器错误。
代替此:
(char) fullname[i]= space; //places a space
这足够了:
fullname[i]= space; //places a space
类似地:
(char) fullname[i]= (char) name[h];
可以是这样:
fullname[i]= name[h];
答案 1 :(得分:-1)
老兄!
根据我的观点,建议您将sprintf()
与strtok()
一起使用。
如果您需要更多具体帮助,请给我留言:D
使用sprintf()
时,您可以在需要的地方打印内容。
例如printf()
是sprintf(stdout, "Hello world\n")
。
在这种情况下,我们将stdout
称为流。
(不用担心,随着时间的流逝,您将自己了解stream
)
因此,您可以轻松地用spirntf()
填充char数组
sprintf(fullname, "%s (%s)%s", lastName, job, firstName)
就像,“嘿,printf("%s (%s)%s\n", lastName, job, firstName)
到fullname
”
我们如何将name
分为lastName
和firstName
?
在这种情况下,我们可以使用strtok()
。
char *lastName = strtok(name, " ");
char *firstName = strtok(NULL, " ");
最后,将是这样。
#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;
}