如何复制“强制”字符串中的字符?

时间:2020-01-11 23:13:14

标签: c string casting char malloc

我是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);
}

2 个答案:

答案 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分为lastNamefirstName

在这种情况下,我们可以使用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;
}

相关问题