字符串显示为奇怪的符号

时间:2011-11-07 03:55:51

标签: c string random character extraction

我在使用另一个作业时遇到了麻烦,我的字符串将printf作为无意义的符号,如钻石中的问号或随机字符。

这次我正在尝试

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

这给了我一些与这个词的长度不一样的胡言乱语。我已经包含了string.h。

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

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

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

非常感谢能帮助我的人。

2 个答案:

答案 0 :(得分:3)

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

word[len] = 'd';

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

除此之外,您没有向我们展示您最初是如何创建word的,因此也可能存在问题。如果你没有正确地初始化它,那么你可能只是在抄袭你不应该修改的所有内存。

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

char *word = "blah";

那应该是

const char *word = "blah";

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

char word[] = "blah";

答案 1 :(得分:0)

这里的单词是指向字符的指针,因此它的malloc一次修复。因此,如果您希望对此字符串进行任何更改,则必须使用memcpy函数或strcpy,strcat函数。

使用这些功能,您可以在字符串

之前或之后追加任意数量的字符