2011-11-07 74 views
1

我一直有麻烦与此另一个作业,我的字符串将printf作为荒谬的符号,就像钻石或随机字符中的问号。字符串显示为奇怪的符号

这一次,我试图做

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

这给我废话,是不是即使是相同长度的字。我已经包含string.h。

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

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

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

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

+0

请张贴打印出乱码的代码。关于追加,除非您使用的char数组有足够的空间分配,否则不能说单词[len]。如果你说char * word =“hello”;并尝试追加一封信...这是一个坏主意! –

+1

仅供参考,由'word'指向的字符串文字'blah'位于只读位置,不可修改。事实上,它是 - 'const char * word =“blah”;' – Mahesh

+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"; 
+0

即使我只是创建字符串和printf它如图所示,并且不会以任何其他方式更改它,我仍然会收到乱码。帮帮我??? – user963070

+0

@ user963070:是的,如果情况如此,您还没有向我们显示任何其他信息。 –

+0

我不知道该说些什么。我重新启动了Ubuntu,现在它消失了。不过,我过去遇到过这样的问题,在那里我得到了所需的字符串和奇怪的符号,重新启动并没有帮助。他们完全是随机字符。我不知道该显示哪些内容会有所帮助。 – user963070

0

下面的字是一个指向字符所以它的malloc是固定在一个时间。所以你想要对这个字符串进行任何修改,你必须使用memcpy函数或者strcpy,strcat函数。

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