我有以下代码,这是一个更大的程序。我试图将一个int传递给一个函数,该函数将char数组的一部分(name [100])复制到另一个,直到达到某个字符,并更新int值。
#include <stdio.h>
void time_loop(int *a, char name[100], char *data, char until_char)
{
int c = 0;
while(name[*a] != until_char)
{
data[c] = name[*a];
a++;
c++;
}
a = a + 2;
}
int main()
{
int i = 3;
char name[100] = {' ', ' ', ' ', 'f', 'o', 'o', ':', '\0'};
char fill_this[15];
time_loop(&i, name, fill_this, ':');
printf("current char index: %d\n", i);
printf("the word is: %s", fill_this);
return 0;
}
目前代码一直运行,直到它命中:
while(name[*a] != until_char)
一段代码,访问* a。
时遇到问题我总是可以轻而易举地将功能更改为:
int time_loop(int a, char name[100], char *data, char until_char)
并返回一个int,但必须有一种正确的方法。
问:将类型int *作为数组的索引号传递的正确方法是什么?
答案 0 :(得分:5)
在某些情况下,您不会修改整数,而是要修改指向它的指针。例如:
a++
a = a + 2
都执行指针运算 - 它们修改指针,而不是指向它的值。你想要的是:
(*a)++
*a += 2
它们对值本身执行修改,而不是指针。
请注意,由于您没有进行边界检查,因此您可以遍历数组的末尾(如果您要搜索的字符不在数组中),这是未定义的行为。您还应确保以空值终止输出字符串 - 在最后一个字符后添加\0
。如果您尝试打印字符串,则不执行此操作可能会导致以后出现未定义的行为。