【问题标题】:strings appear as weird symbols字符串显示为奇怪的符号
【发布时间】:2011-12-23 08:54:44
【问题描述】:

我在另一项作业中遇到了麻烦,我的字符串将打印为无意义的符号,例如菱形中的问号或随机字符。

这次我要努力了

char *word = "blah";
printf("word: %s", word);

这让我胡言乱语,甚至与单词的长度都不一样。我已经包含了 string.h。

我要做的是获取一个字符串,一次将两个字母附加到字符串的前面或后面,然后从字符串的后半部分提取字符。使用如下方法追加:

int len = strlen(word);
word[len] = 'd';

另外,我如何提取最后两个字符?我假设我会通过获取单词的 strlen 并将其转换为字符数组并从索引复制到索引来提取它。有没有更好的办法?另外,随机问题:我什么时候使用'\0'?这种情况下需要吗?

非常感谢任何可以帮助我的人。

【问题讨论】:

  • 请张贴打印出乱码的代码。关于追加,除非您使用的 char 数组分配了足够的空间,否则您不能说 word[len]。如果你说 char *word = "hello";并尝试附加一个字母......这是个坏主意!
  • 仅供参考,word 指向的字符串文字 blah 位于只读位置,不可修改。事实上它是 - const char* word = "blah";

标签: c string random character extraction


【解决方案1】:

您的代码找到了word 的长度,这是一个在末尾包含空终止符的数字。然后,您继续使用以下行覆盖终止符:

word[len] = 'd';

所以现在你有一个字符串不能正确终止并且不能很好地与 I/O 函数配合使用。记住;索引从零开始。长度为 x 的字符串具有可访问的字符,范围为​​ 0x-1

除此之外,您并没有首先向我们展示您是如何创建word 的,因此那里也可能存在问题。如果你一开始没有正确初始化它,你可能只是在你不应该修改的内存中踩踏。

编辑:好的,所以你已经发布了创建字符串的代码,这是另一个问题:

char *word = "blah";

应该是这样的

const char *word = "blah";

因为word 指向只读内存。您不能修改word 指向的内容。相反,如果您稍后需要修改字符串,请创建一个数组:

char word[] = "blah";

【讨论】:

  • 即使我只是创建字符串并按所示打印它并且不以任何其他方式更改它,我仍然会胡言乱语。救命???
  • @user963070:是的,如果是这样的话,还有其他事情你没有告诉我们。
  • 我不知道该说什么。我重新启动了 Ubuntu,现在它消失了。不过,我过去曾遇到过这个问题,我得到了所需的字符串和奇怪的符号,但重新启动并没有帮助。他们是完全随机的角色。我不知道该显示什么会有帮助。
  • @user963070:“奇怪的符号”是您的字符串未正确终止的一个标志。
【解决方案2】:

这里的 word 是一个指向字符的指针,所以它的 malloc 是一次固定的。所以你想对这个字符串进行任何更改,你必须使用memcpy 函数或strcpy,strcat 函数。

使用这些函数,您可以在字符串之前或之后附加任意数量的字符

【讨论】:

    猜你喜欢
    • 2012-10-01
    • 2014-09-14
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2013-10-29
    相关资源
    最近更新 更多