2017-02-23 212 views
1

我有这个功能称为add_to_string,我把它从我的主要功能为char添加到字符串在C字符添加到字符串

add_to_string(name[I]); 

在我看来,我不能一个char追加到一个字符串。那么我将如何解决这个问题呢?

我在此代码的主要意图是简单地打印输入的名称缩写,避免用户输入错误(加名和中间名之间有两个空格)

这里是我的全部代码

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

string add_to_string (char letter); 
string result; 

int main (void) 
{ 
    printf("pleas enter your full name: "); 
    string name = get_string(); 
    int len = strlen(name); 
    for (int i = 0; i < len; i++) 
     { 
      if (i == 0) 
      { 
       add_to_string(name[i]); 
      } else if (name[i] == ' ') 
      { 
       if (name[i + 1] != ' ') 
       { 
       add_to_string(name[i]); 
       } 
      } 
    } 

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

string add_to_string (char letter) 
{ 

    strncat(result, letter, 30); 
    return result; 
} 
+2

编译启用所有警告......你有几个误用,并键入任何像样的编译器将突出马上错误。 – StoryTeller

+0

我并没有真正明白你的意思,但我想你的意思是字符串和get_string(),这是一个正在采用的课程,他们为我们提供了这个包含这些类型和功能的cs50标题,例如 –

+1

。 [man strncat](https://linux.die.net/man/3/strncat):'char * strncat(char * dest,const char * src,size_t n);'。第二个参数的类型是什么,你给它的类型是什么? – kaylum

回答

0

我不知道什么是string这里,但我认为它是char*

你的功能一个typedef

string add_to_string (char letter) 
{ 
    strncat(result, letter, 30); 
    return result; 
} 

是错在几个方面,

第一result是一个全局变量,所以最初它指向NULL。

您需要为您的字符串分配存储空间,让result点到存储或声明result作为数组

char result[128]; // assuming here it is still global otherwise initialize 

功能add_to_string增加一个字符字符串,但你叫strncat这需要两个字符串作为参数加上大小。

而是追加字符这样

size_t len = strlen(result) 
result[ len++ ] = letter; 
result[ len ] = '\0'; 

这使result字符串