C静态变量问题
发布时间:2020-12-16 06:45:28 所属栏目:百科 来源:网络整理
导读:帮帮我,大师 /* * In this function,I want the static variable position to point to next element * of the str,every time I call this function. */void function(char *str){ static char *position = str; /* Do something here to this position */
帮帮我,大师
/* * In this function,I want the static variable position to point to next element * of the str,every time I call this function. */ void function(char *str){ static char *position = str; /* Do something here to this position */ position += 1; } 这个程序的目的是进行字符串替换,每次我替换str的模式时我必须让静态位置变量指向str的新位置,然后我将每个东西复制到另一个新的字符串中. 问题是,编译器一直告诉我“初始化元素不是常量”,我该如何解决这个问题? 解决方法
函数中不能有一个静态变量指向str的下一个元素,因为position是一个初始化一次的全局变量,每次调用一个函数时str都可能有不同的值.
你需要的是一个循环遍历str, void func1(char *str) { char *p; for (p = str; /* some condition here */; ++p) { /* Do something here to this position */ } } 或者在此函数外部有一个循环,并且每次迭代都会将str递增1. void func1(char *str) { /* Do something here to this position */ } void func2() { char *str = ...; ... char *p; for (p = str; /* some condition here */; ++p) { func1(p); } } 当然,您可以首先将静态初始化为NULL并使用它来检查您是否开始迭代str,但这样的风格很差:太有状态且容易出错,不可重入且不是线程安全的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |