我正在使用 APK 格式為 Android 上的 Termux 終端仿真器撰寫包管理器。該程式是用 C 撰寫的,并使用各種引數,如“sync”和“remove”。但是,我撰寫的函式無法識別我為要“同步”的包名稱撰寫的引數。'sync' 用于從 fdroid 存盤庫下載 apk 并使用引數中給出的 apk 名稱使用 xdg-open(尚未實作)打開它。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void syncapk(char * apkname);
int main(int argc, char **argv)
{
if(argc==1) {
printf("Displaying help screen.\n");
} else if(argc>=2) {
if(strncmp(argv[1], "sync\n", 4) == 0) {
syncapk(argv[2]);
} else if(strncmp(argv[1], "upgrade", 7) == 0) {
printf("Upgrading all packages!\n");
} else if(strncmp(argv[1], "remove", 6) == 0) {
printf("Removing package!\n");
}
}
return 0;
}
void syncapk(char * apkname) {
printf("Syncing package: %s!\n", apkname);
char * synccmd = "fdroidcl download %s", apkname;
system(synccmd);
}
GCC(我的編譯器)說引數(我希望從存盤庫下載的 apk 的名稱)“重新宣告為不同的符號”。我對用 C 撰寫程式還很陌生,所以請隨意批評其他事情,而不僅僅是問題本身,以及我是否可以完全采用不同的方法。
uj5u.com熱心網友回復:
這并不像你認為的那樣:
char * synccmd = "fdroidcl download %s", apkname;
這是定義一個型別char *為 namedsynccmd的變數和一個型別為charnamed的變數apkname。后者與同名引數沖突,因此出錯。
如果你想構建一個格式化的字串,你需要使用sprintf來做到這一點:
char synccmd[100];
sprintf(synccmd, "fdroidcl download %s", apkname);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/534154.html
標籤:C
