109*_*zu_ 2 c sorting c-strings char strcpy
这是我编写的程序中的主要函数,我需要对字符数组进行排序,使这些字符在开头具有偶数 ascii 代码,并且我想显示数组在每次迭代时的排序方式。
\n#include<stdio.h>\n#include<stdlib.h>\n#include<string.h>\n\n\n int main ()\n { \n int n, i,j;\n char echange;\n printf("array size : ");\n scanf("%d", &n);\n char t[n];\n for (i=0; i<n; i++)\n {\n printf("enter array elements : ");\n scanf(" %c", &t[i]);\n }\n\n \n\n for (j=0; j<n; j++)\n for (i=0; i<n; i++)\n {\n if ((t[i] % 2!=0) && (t[i+1] % 2 ==0) && (i != n-1))\n {\n strcpy(echange, t[i]);\n strcpy(t[i], t[i+1]);\n strcpy(t[i+1], echange);\n printf (" %c (%d)", t[i], t[i]);\n }\n else\n printf(" %c (%d)", &t[i], t[i]);\n\n }\n\n\n\n\n }\nRun Code Online (Sandbox Code Playgroud)\n这个问题通常可以编译,但输出很奇怪:
\narray size : 3\nenter array elements : d\nenter array elements : f\nenter array elements : g\n2 \xe2\x94\x94 (100) \xe2\x94\xb4 (102) \xe2\x94\xac (103) \xe2\x94\x94 (100) \xe2\x94\xb4 (102) \xe2\x94\xac (103) \xe2\x94\x94 (100) \xe2\x94\xb4 (102) \xe2\x94\xac (103)\nProcess returned 0 (0x0) execution time : 4.063 s\nPress any key to continue.\nRun Code Online (Sandbox Code Playgroud)\n那么我的代码有什么问题吗?以及为什么如何将 strcpy 与单个字符一起使用?顺便说一句,我尝试不使用 strcpy 函数:
\nechange = t[i];\n t[i] = t[i+1];\n t[i+1] = echange;\nRun Code Online (Sandbox Code Playgroud)\n它也不起作用
\n该strcpy函数用于将空终止字符串从一个char数组复制到另一个数组。您所做的是复制单个字符,因此您将无效参数传递给函数,从而触发未定义的行为。
对于单个字符,您可以直接分配给它们。
echange = t[i];
t[i] = t[i+1];
t[i+1] = echange;
Run Code Online (Sandbox Code Playgroud)