加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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,但这样的风格很差:太有状态且容易出错,不可重入且不是线程安全的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读