如何在C中使用char *

时间:2010-12-07 15:34:54

标签: c++ c

我有这样的主要功能:

void main()
{
     char *s;
     inputString(s);
     printf("%s",s);

}

和inputString函数:

void inputString(char *&s)
{

    //Some code line to input a string and set s point to this string

}

是否有一个函数auto malloc memory足够的存储字符串输入(我需要在inputString函数中输入字符串)。

5 个答案:

答案 0 :(得分:5)

只需3行代码(将这些代码置于int main()内)就足够了

std::string s;
std::cin >> s; //or getline() as desired
std::cout << s;

答案 1 :(得分:4)

如果你继续使用这种C风格的方法,那么不,你将不得不做出假设并自己分配足够的内存。 C ++方法更加优越,使用std :: strings而不进行手动分配:

#include <string>
#include <iostream>
void inputString(std::string& s)
{

    //Don't bother for the memory management

}
int main() 
{
     std::string s;
     inputString(s);
     std::cout << s ;
}

另请注意,您的代码不是合法的C ++。 void main()非法!!!

编辑: 在回答此问题时,问题被标记为C ++。后来这个问题没有被OP重新标记,我也不太同意......

答案 2 :(得分:1)

您在示例中混合使用C和C ++。

在您使用 s 之前,应该初始化它。例如,像这样:

void inputString(char *&s)
{
    s = strdup(xxx); // or malloc, calloc, etc.

}

但实际上,最好只使用普通的旧C:

char* inputString(void)
{
    char* s = strdup(xxx);
    return s;
}

答案 3 :(得分:1)

假设你这样做是C而不是C ++。

有两种方法,inputString必须分配内存,或者inputString的调用者必须分配内存。

如果inputString分配内存,你的函数可能会像:

char* inputString(void)
{
    int len = strlen (MyInternalString) + 1;
    char* s = malloc (len);
    strncpy(s, MyInternalString, len);
    return s;
} //similar to what Rustram illustrated

你还应该包括: void freeString(char * str) {     自由(STR); } 同样。这使用户清楚地知道他们需要自己管理返回字符串的内存。

或者,您可以编写inputString,其中用户需要提供所需的内存。这将看起来像

int inputString(char* str, int maxLen) //
{
  if (maxLen >= myInternalStringLength + 1)
  {
    strncpy(str, myInternalString, maxLen)

  }
  return myInternalStringLength  + 1;
}

这里我的字符串的用户可以检查返回代码,看看他分配的缓冲区是否足够大。如果它太小,那么他总能重新分配一个更大的

你的主要成为:

int main()
{
     char *s = NULL;
     int len = inputString(s, 0);
     s = alloca(len); //allocates the memory on the stack
     len = inputstring(s, len);
     printf("%s",s);
} //no need to free the memory because the memory alloca'ed gets 
  //freed at the end of the stack frame

答案 4 :(得分:0)

int main()
{
    std::string s;
    inputString(s);
    printf("%s",s.c_str());  
}

和inputString函数:

void inputString(std::string& s)
{
    //Some code line to input a string and set s point to this string
    std::cin >> s;
}