Tag: 返回

字符串不是从C函数中的返回值捕获的

我有一个函数,它应该合并2个字符串并返回结果更长的字符串。 该字符串似乎已成功合并到函数中,但返回时信息将丢失。 函数中的’output’包含合并的字符串,应返回此值。 mergedString不在main中打印,而是在函数中打印。 为什么? 如何使其工作? main () { char *mergedString = mergeStrings( frags[maxOverlapArrPos1], frags[maxOverlapArrPos2], maxCharOverlap); printf (“mergedStringInMain is %s\n”, mergedString); } char * mergeStrings(char * string1, char * string2, int overlapCharSize){ int overlapStartPosition = strlen(string1) – overlapCharSize; char output[] = “”; if (strlen(string2)>overlapCharSize){ strncat(output, string1, overlapStartPosition); strncat(output , string2, strlen(string2)); } printf (“mergedStringInFunction is […]

C:函数可以返回一个全局变量吗?

假设我有一个带有全局变量的* .c文件(在它有文件范围的意义上是“全局”)和一个函数。 函数可以将该变量作为要在其他翻译单元中使用的值返回吗? 我认为答案是肯定的。 如果没有别的,我假设在C return中运行“copy”语义—返回表达式的值。 但我不确定。

printf返回一个字符串

是否有类似printf的函数可以返回字符串而不是打印它? 我有一个以某种颜色打印字符串的函数,但它必须是字符串文字,而不是接受像printf这样的变量。 // Function declaration (Assums YELLOW and NORMAL are the unix constants for terminal colors void pYellow(char *str) { printf(“%s%s%s”, YELLOW, str, NORMAL); } //Function call void pYellow(“This is a string”); 如果我想用变量打印颜色,它就不会起作用。 像pYellow(“Num: %d”, 42); 会出错,因为它的参数太多了。 做pYellow(printf(“String”)); 也不会工作。 TL:DR我想知道是否有一个printf方法返回一个字符串而不是打印它。

在C中返回一个字符串数组

我正在进行一项任务,我需要让一个方法返回一个指向字符串数组的指针,从文件中读取。 该函数有效,但是当我尝试将返回的指针分配给main函数中的变量时,我最终得到一个空值数组。 这是我的代码: #include char **buildAnsArray(){ FILE *in; int num, i; in = fopen(“data.txt”, “r”); fscanf(in, “%d”, &num); char ansArray[10][num]; for(i = 0; i < num; i++){ fscanf(in, "%s", ansArray[i]); } return ansArray; }; main(){ char **ansArray = buildAnsArray(); } 我正在使用的输入文件(data.txt)以: 3 B 20 1101 ansArray(在buildAnsArray中)正确包含{‘B’,’20’,’1101’},但ansArray(在main中)为空。 我知道我可以将所有内容移动到main,而不用担心将指针返回到字符串数组,但是赋值需要buildAnsArray函数。 我该怎么做才能解决这个问题?

如果没有return语句,这个C int函数如何工作?

我有这个C代码,我确信它不会起作用,但确实如此。 #include int* find (int* a, int val) { if (*a == val) return a; else find(a+1, val); } int main() { int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int *b; b = find(a, 7); printf(“%d\n”, *b); return 0; } 当然,我从gcc收到警告,因为它在find函数的else分支中缺少一个return语句。 但是,它完美地运作。 为什么会这样? 如何通过递归函数返回int? 当然,最后一次调用返回一个int,但我在void上下文中调用它。

为什么main()不需要返回类型(比如int),即使它返回一个intiger?

#include main() { // // return 0; } 我的意思是,即使我没有指定它的返回类型,上面的代码也没有显示任何错误。 (简单地说是’main’而不是’int main’)。

返回参数不起作用 – 给我一些奇怪的错误

这是一个应该从字符串创建子字符串的简单程序,然后它应该将子字符串作为可以打印出来的东西返回。 它实际上是一个练习,只能改变子串函数。 问题是我找不到不会引发各种警告和错误的返回类型。 我该如何更改退货类型? static void panic(const char *serror) { printf(“%s”, serror); exit(1); } static void *xmalloc(size_t size) { void *ptr; if (size == 0) panic(“Size is 0!\n”); ptr = malloc(size); if (!ptr) panic(“No mem left!\n”); return ptr; } static char *substring(const char *str, off_t pos, size_t len) { char out [len]; int index; for(index […]

C – 尝试返回文件中的上一行

我必须阅读一个可以从可选注释开始的文本文件。 在实践中,我必须跳过文件开头的任何不以’@’或’>’开头的行。 在我的测试用例中,文件看起来像: # Sun Jul 12 22:04:52 2009 /share/apps/corona/bin/filter_fasta.pl –output=/data/results/solid0065/primary.20090712170542775 # Cwd: /state/partition1/home/pipeline # Title: solid0065_20090629_FC1_Tomate_Heinz_4_5_Kb_Tomate_Heinz_4_5_Kb_01 >125_963_316_F3 T1230330231223011323010013 所以我必须跳过前3行(但一般来说我必须跳过n行)。 我必须用2或4个文件[它们在FILE ** inputFiles中]重复这个。 我试过这个循环: buffer = (char*) malloc (sizeof(char) * 5000); if (buffer == NULL) notEnoughMemory(); for (i = 0; i ‘)){ fgetpos(inputFiles[i], &position); fgets(buffer, 4999, inputFiles[i]); } fsetpos(inputFiles[i], &position); } 其中cIn是number_of_input_files + 1.尝试调试它时,循环在读取第四行后正确停止。 但是当我使用setpos时,它不会像我期望的那样回到第四行的开头,而是在第三行的中间。 […]

从函数返回局部变量

在下面的代码中,我返回一个指向函数内部本地创建的char数组的指针。 因此,当返回值分配给y ,它应该都是垃圾。 当我打印%10s或%100s时,这似乎也适用。 但是当我打印%1000s ,我得到的输出似乎让我感到困惑。 #include char* get() { char x[1000] ; int i = 0; for(; i < 999; ++i) { x[i] = 'A'; } x[999] = '\0'; printf("%1000s\n",x); return x; } int main() { char* y = get(); printf("Going to print\n"); printf("%1000s\n",y); } 输出是 main()函数访问用于创建本地函数char数组的相同内存位置是巧合还是更具体?

如何返回变量名并指定c中返回的变量的值

我想使用一个动态变量,其值在运行时会发生变化。 例如 char * aVar = “ABC”; char * bVar = “DEF”; char * cVar = “XYZ”; char *dVar = NULL; dVar = foo1(); print dVar; foo1内部调用foo2 ,它应返回变量名称(如”aVar” , “bVar”或”cVar” )。 foo1应该返回根据foo2的返回值命名的所述变量的值。 获取变量名称我们可以使用(非标准)宏: ##define GET_VAR(varname) #varname; …但是我如何才能获得名为变量的值?