C如何在用户输入的char指针中存储单词

时间:2015-08-12 12:50:30

标签: c pointers

.viewall > a::before {
    content: "MEER INFO";
    font-size: 10px;
}
.viewall > a {
    font-size: 0 !important;
}

这是我的代码。是否可以将字符串存储在数组或指针中。这种语言很老。例如,如果用户写入void和null,则输出应为null和void。我尝试使用指向char数组的指针,并希望只打印单词后缀,它不会做任何事情。我的代码怎么了?

3 个答案:

答案 0 :(得分:4)

三个问题:

  1. char *read[100];不是char的数组。它是指向char的指针数组。将其更改为char read[100];以获取大小为100的char数组。
  2. printf("%s",*back);错误,因为*backchar,但℅s需要char*。将其更改为printf("%c",*back);
  3. for (back = ch; back != read; back--) {应为for (back = ch - 1; back >= read; back--) {。否则,您将在循环的第一次迭代中读取未初始化的内存位置。
  4. 现在您的代码容易受到缓冲区溢出的影响,即,当输入的字符超过100个时,任何结果都可能是因为您的程序将从无效的内存位置读取和写入,从而调用未定义的行为。

答案 1 :(得分:2)

如果您的系统(例如POSIX)拥有它,您应该使用getline(3)。否则,声明足够大的行缓冲区(例如char linebuf[200];)并使用fgets(3)

然后,您可以解析字符串(即行缓冲区)。您可以使用<ctype.h>中的%70[A-Za-z]功能,也可以使用isalpha(3)(例如包含Ы的控制字符串...)

如果你想解析sscanf(3)字符串,事情会变得更复杂(因为非拉丁字母 - 比如俄语UTF-8,例如beaconArray - 具有多字节编码)。然后使用yery

之类的Unicode

答案 2 :(得分:2)

C中的字符串没有Java或C#/ .Net中的字符串所具有的所有花哨的东西。 C字符串基本上是char的数组,以'\ 0'字符结尾。因此,当一个函数对C字符串进行操作时,它开始读取char *指针指定的内存位置的字符并继续读取,直到它在字符串中找到'\ 0'字符。如果它没有找到'\ 0'字符,它将继续读取字符,直到它遇到错误,因为它试图读取未分配/分配的内存地址中的内存。 PS。您不能将void指定为值,因为它是一种类型。