- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想我对 C 命令行参数有点生疏。我查看了我的一些旧代码,但无论这个版本是什么,都会出现段错误。
运行方式是 ./foo -n num(其中 num 是用户在命令行中输入的数字)
但不知何故它不起作用。我哪里出错了?
编辑:当我尝试访问 atoi(optarg) 时出现段错误,atoi(0x0) 发生段错误。
int main(int argc, char *argv[])
{
số nguyên c;
int maximum_n = max_n(); /* Stores the maximum value in the sequence a long can hold */
unsigned long *array = NULL;
while((c = getopt(argc, argv, ":n:")) != -1) {
switch(c) {
case 'n':
if(atoi(optarg) > maximum_n) {
printf("n is too large -- overflow will occur\n");
printf("the largest Fibonacci term than can be calculated is %d\n", maximum_n);
exit(EXIT_SUCCESS);
}
else {
array = fib_array(atoi(optarg));
}
phá vỡ;
}
}
printf("The %d Fibonacci term is %lu\n", atoi(optarg), array[atoi(optarg)]);
trả về 0;
}
1 Câu trả lời
像许多编程语言一样,在 C 中,argv[0]
通常包含程序的名称。该值实际上取决于用于启动进程的 exec*
系统调用的参数。出于您的目的,该部分无关紧要。需要注意的重要一点是 argc 总是比您的程序在命令行上接收到的参数数量大 1。在你的情况下 argc == 3
Và argv
的值应该看起来像
argv[0]: "./foo"
argv[1]: "-n"
argv[2]: "10"
您的程序出现段错误的原因是您在 optarg
不再有效后访问它。每次调用 getopt()
giờ,optarg
的值都会改变。当您在 while 循环之外调用它时,它已更改为 VÔ GIÁ TRỊ
. hiện hữu 'n'
的 switch case 中时,您应该将 atoi(optarg)
的值存储到一个变量中。
由于您仍然对此感到困惑,我已经用必要的修复更新了您的代码。
int main(int argc, char *argv[])
{
số nguyên c;
int maximum_n = max_n(); /* Stores the maximum value in the sequence a long can hold */
unsigned long *array = NULL;
int n = -1;
while((c = getopt(argc, argv, ":n:")) != -1) {
switch(c) {
case 'n':
n = atoi(optarg);
if(n > maximum_n) {
printf("n is too large -- overflow will occur\n");
printf("the largest Fibonacci term than can be calculated is %d\n", maximum_n);
exit(EXIT_SUCCESS);
}
else {
array = fib_array(n);
}
phá vỡ;
}
}
if (n == -1)
{
printf("You must specify a value with -n\n");
return 1;
}
printf("The %d Fibonacci term is %lu\n", atoi(optarg), array[n]);
trả về 0;
}
关于c - Argc 返回 1,argv 返回 NULL,尽管输入了命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35675103/
Tóm lại: Tôi muốn trích xuất nhiều tùy chọn khác nhau từ một tham số mẫu variadic, nhưng không chỉ theo nhãn mà còn theo chỉ mục của các tham số đó, trong đó nhãn không xác định. Tôi thích cách tiếp cận tăng cường (ví dụ như chiến lược heap hoặc lockfree), nhưng muốn làm cho nó tương thích với S
Tôi có thể cần trợ giúp về câu lệnh IF trong ô của Excel không? Nó đang làm gì thế? Những đánh giá nào đã được thực hiện cho "BaselineAmount"? =IF(BaselineAmount, (Phương sai/Đường cơ sở
Tôi đang sử dụng phương pháp sau: public async Task Save(Foo foo,out int param) { ....... MySqlParameter prmparamID
Tôi đang sử dụng CodeGear RAD Studio IDE. Để kiểm tra ứng dụng của tôi bằng các đối số dòng lệnh, tôi đã sử dụng trường "Đối số" trong menu "Chạy->Đối số" nhiều lần. Nhưng mỗi lần tôi đưa cho nó một giá trị mới, nó lại không chọn được từ "Thả xuống"
Tôi đã viết một số mã cho lớp Thẻ tín dụng, dán bên dưới. Tôi có một hàm tạo chấp nhận các biến trên và tôi đang tìm cách định dạng các biến này thành chuỗi để đầu ra cuối cùng sẽ giống như Số: 1234 5678 9012 3456 Hạn chót:
Tham số IN của MySql - Tham số IN VarChar val có yêu cầu dấu ngoặc đơn khi sử dụng trong quy trình được lưu trữ không? Tôi đã tạo mã ASP cổ điển như bình thường, nhưng tôi không cập nhật cột. Tôi có cần trích dẫn tham số VarChar không?
Bắt đầu như bên dưới nhưng có vẻ như không biết cách hoàn thành. Về cơ bản, nếu tôi gọi myTest([one, Two, Three], 2); thì nó sẽ trả về phần tử thứ ba. Phải sử dụng vòng lặp for để tìm ra giải pháp. chức năng
Khi 1113355579999 được truyền dưới dạng đối số, giá trị sẽ trở thành 959050335 bên trong hàm. Gọi (main.c): printf("%d\n", FindCommonDigit(111335557999
Câu hỏi này đã có câu trả lời tại đây: Java là "truyền theo tham chiếu" hay "truyền theo giá trị"? (92 câu trả lời) Đã đóng 9 năm trước. lớp công khai StackOve
Tôi thực sự bối rối khi một cái gì đó như 1 == scanf("%lg", &entry) được hoán đổi thành scanf("%lg", &entry) == 1 mà không có sự khác biệt nào. Sổ tay thí nghiệm của tôi ghi là như thế, nhưng tôi nghĩ là như thế cũng dễ hiểu. 1 =
Tôi đang cố gắng sử dụng Delphi 7 với một hàm gọi SetupDiGetDeviceRegistryProperty. Cuộc gọi này đến từ hàm mẫu SetupEnumAvailableComPorts. Nó trông như thế này:
Tôi cần triển khai hiển thị một số sự kiện trên một dự án hiện có. Tôi không thể thay đổi cấu trúc cơ sở dữ liệu. Trong Controller của tôi, tôi được truyền dấu thời gian (từ yêu cầu ajax) và tôi cần hiển thị 8 sự kiện trước đó. Vì vậy, nếu dấu thời gian là (sau khi chuyển đổi)
Mới làm quen với rails. Sau khi làm theo hướng dẫn về liên kết đa hình, tôi đã tìm ra cách này để thiết lập @client khi tạo và hủy. @client = Client.find(params[:client_id] || p
Tôi có thể chạy chương trình Java thông qua Eclipse bằng cách đặt đối số VM thành -Xmx1024m -Xms256M. Bây giờ tôi muốn chạy cùng một chương trình Java (jar) thông qua tệp .bat trong Windows
Tôi có một DLL Delphi hoạt động khi được gọi bởi một ứng dụng Delphi và xuất một phương thức được khai báo là: Procedure ProduceOutput(request,inputs:widestring; va
Sau khi xem qua tài liệu và ví dụ, tôi vẫn chưa hiểu chính xác các tham số trong tệp schema.yaml được sử dụng ở đâu. Sử dụng các mẫu mã AWS tại đây: https://github.com/aws-samples/aws-proton
Tham số thủ tục: thủ tục get_user_profile ( i_attuid trong ras_user.attuid%type, i_data_group trong data_group
Tôi có một chuỗi được truyền làm tham số cho quy trình được lưu trữ của tôi. dim AgentString as String = " 'test1', 'test2', 'test3' " Tôi muốn sử dụng tham số đó trong câu lệnh IN. VÀ
Câu hỏi này đã có câu trả lời: Khi nào tôi nên sử dụng "this" trong lớp học? (17 câu trả lời) Đã đóng 6 năm trước. Tôi đang chạy một số mã Java và tôi thấy có điều gì đó mà tôi không hiểu rõ. Tại sao
Tôi nhập scroll(0,10,200,10); nhưng khi chạy, nó truyền chuỗi "xxpos" hoặc "yypos", tôi đã thử không có dấu nháy đơn nhưng vẫn không được. cuộn = hàm(xp
Tôi là một lập trình viên xuất sắc, rất giỏi!