我在使用另一个作业时遇到了麻烦,我的字符串将printf作为无意义的符号,如钻石中的问号或随机字符。
这次我正在尝试
char *word = "blah";
printf("word: %s", word);
这给了我一些与这个词的长度不一样的胡言乱语。我已经包含了string.h。
我要做的是取一个字符串,一次一个地将两个字母附加到字符串的前面或后面,然后从字符串的后半部分提取字符。使用以下方法追加:
int len = strlen(word);
word[len] = 'd';
另外,如何提取最后两个字符?我假设我通过获取单词的strlen并将其转换为字符数组并从indice复制到indice来提取它。有没有更好的办法?另外,随机问题:我什么时候使用'\ 0'?在这种情况下是否需要?
非常感谢能帮助我的人。
答案 0 :(得分:3)
您的代码找到word
的长度,不的数字在末尾包含空终结符。然后,使用以下行继续覆盖终结符:
word[len] = 'd';
所以现在你有一个字符串没有正确终止,并且不能很好地与I / O函数一起使用。记得; indeces从零开始。长度为x
的字符串的可访问字符的范围为0
到x-1
。
除此之外,您没有向我们展示您最初是如何创建word
的,因此也可能存在问题。如果你没有正确地初始化它,那么你可能只是在抄袭你不应该修改的所有内存。
编辑:好的,所以你已经发布了创建字符串的代码,这是另一个问题:
char *word = "blah";
那应该是
const char *word = "blah";
因为word
指向只读内存。您不能修改word
指向的内容。相反,如果您需要稍后修改字符串,请创建一个数组:
char word[] = "blah";
答案 1 :(得分:0)
这里的单词是指向字符的指针,因此它的malloc一次修复。因此,如果您希望对此字符串进行任何更改,则必须使用memcpy
函数或strcpy,strcat
函数。
使用这些功能,您可以在字符串
之前或之后追加任意数量的字符