【发布时间】:2016-12-09 16:10:25
【问题描述】:
我正在尝试做的是解析字符串,其中包含字符数组数组的空格。所以如果输入是“ab cd ef”,我希望我的数组是数组[0]==ab,数组[1]==cd,数组[2]==ef。我希望这能说清楚。然而问题是我不能使用任何库函数。没有 string.h,没有 fget,只有 scanf 和 printf。这是我的代码片段:
char word[25] = "";
char *words[25];
for (int i = 0; i <= find_length(input); i++){
if(input[i] == ' ' || i == find_length(input)){
words[position] = word;
printf("%s%d ",words[position], position);
position++;
counter = 0;
word[0] = '\0';
}
else{
word[counter] = input[i];
counter++;
}
}
position = 0;
while(counter < 5){
printf("%s%d ",words[position], position);
counter++;
}
首先我将字符串解析为单个单词,然后尝试将它们放入数组中。我希望我的逻辑是正确的。所以问题是,第一个 printf(for 循环中的一个)打印正确的值及其位置。但是第二个 printf (仅用于确保正确解析字符串)仅打印 0。 因此,例如输入“ab cd ef”给出:
ab0 cd1 ef2 0 0 0 0 0
我怀疑问题是我没有向数组数组添加值,只是分配指针。而且由于我转储了“单词”,因此它们什么也没有。如果这是正确的,我如何分配值而不是指针?
当然,这个假设可能是错误的,如果是这样,你能指出我的错误以及如何解决它吗?谢谢。
PS:我知道我应该 strcpy 字符串的值 not = it,但正如我所说,我不能使用除 scanf 和 printf 以外的任何 lib 函数(find_length 是我自己的函数)
【问题讨论】:
-
什么是
input?它的类型,它的价值? -
find_length()的代码在哪里? -
检查您对
counter和offset的使用。它们在最后五行代码中混在一起。 -
假设你的
find_length()相当于strlen(),我认为可视化你的代码会有所帮助:pastebin.com/mbLJ0ueY。将此 pastebin 中的 url 复制并粘贴到您的浏览器。等待几秒钟让它加载,然后使用前进和后退按钮导航。这不是垃圾邮件...我没有在此处粘贴链接,因为它太大而无法容纳评论,而且缩短的 URL 不受欢迎。 -
words[position] = word;: 你设置了相同的缓冲区地址。然后缓冲区重置为word[0] = '\0';
标签: c arrays string pointers char