我在函数中有以下代码。
char * stringFiveds = strtok(stringFive[3], "ds");
当我编译时,我得到警告未使用的变量。
我不打算在此功能中使用srtingFiveds
。我想在main()
中使用它。我对这个问题有两个部分。
stringFiveds
,如何解决此警告。我是新手,请你尽可能详细。
答案 0 :(得分:2)
如果您不想在函数中使用stringFiveds
,则可以删除该变量声明,因为您不需要它。
如果您想让其他函数可以访问它,您可以将其声明为全局变量,或将其作为参数传递给其他函数。
所以而不是
char * stringFiveds = strtok(stringFive[3], "ds");
你可以拥有
strtok(stringFive[3], "ds");
如果要将stringFiveds
声明为全局变量,只需在函数外声明它:
#include <stdio.h>
char * stringFiveds; // declare outside of function
void foo() {
// you can access stringFiveds here
}
int main() {
// you can also access stringFiveds here
}
如果要将stringFiveds
作为函数参数传递:
#include <stdio.h>
// declare outside of function
void foo(char * stringFiveds) {
}
int main() {
char * stringFiveds;
foo(stringFiveds);
}
答案 1 :(得分:1)
如果您不打算在函数中使用变量,请不要创建变量。如果你只是为调用函数的副作用创建一个变量,你可以删除赋值:C允许你调用一个返回值的函数,就好像它是一个“过程” - 即一个void
函数。 / p>
另一种选择是在全局范围内声明变量。如果选择此路线,请考虑使变量static
将其保留在其翻译单元的范围内。您也可以将变量设为全局变量,但这通常不是一个好的选择,因为它会使您的数据暴露在有用的范围之外。
如果您计划将其传递给另一个函数,那将被视为“使用变量”,解决“未使用的变量”警告。
注意:如果您对如何消除此警告感到好奇,a common trick is to cast your variable to void
。
答案 2 :(得分:0)
好吧,你可以做粗略的事情并使它成为一个全局变量(即声明在你的函数之外)。
但这确实不是一个很好的解决方案。这会破坏数据封装,通过让.c文件中的所有内容访问该变量,无论他们是否需要了解它。
更好的解决方案是将您的函数作为参数传递给您。
例如:
function foo(char* stringFiveDs) { // use stringFiveDs here }
或者,您可以传入stringFive并在您需要的函数中声明stringFiveDs。如下所示:
function bar(const char* stringFive) {
char* stringFiveDs = strtok(stringFive[3], "ds");
...
}
答案 3 :(得分:0)
示例代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char **func(const char *str, const char *delim){
char *strwk = strdup(str);
char **strs = malloc(sizeof(char*));
int count = 0;
char *p;
for(p=strtok(strwk, delim); p != NULL ; p=strtok(NULL, delim)){
strs[count++] = strdup(p);//cutting string copy into
strs = realloc(strs, (count+1)*sizeof(char*));//+1 : Also, reserved for NULL
}
strs[count] = NULL;//end mark
free(strwk);
return strs;
}
void func_d(char **ss){
char **sp = ss;
while(*sp)
free(*sp++);
free(ss);
}
int main(void){
char *stringFive[5] = {
"", "16X16", "1,2,3", "123d45s678", "last,,end"
};
char **stringFiveds = func(stringFive[3], "ds");
int i;
for(i=0; stringFiveds[i] != NULL; ++i)
printf("%s\n", stringFiveds[i]);
func_d(stringFiveds);
return 0;
}